IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

Rosaces


Sujet :

Caml

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Rosaces
    Bonsoir à tous,

    J'utilise Caml Light depuis environ 1 an maintenant (prépa ), et je me suis lancé il y a peu de temps dans un jeu de Same. Là n'est pas le problème.

    Un des pions que je voudrais utiliser est un disque sur lequel est dessiné une rosace, que je créé avec ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    let rosace r c1 c2 x y =
    	set_color c1 ;
    	fill_circle x y (int_of_float(r));
    	let sommets r =
    		let tab = make_vect 6 (0,0) in
    		for k=0 to 5 do
    			tab.(k) <- (int_of_float(r*.cos(float_of_int(k)*.Pi/.3.))+x,int_of_float(r*.sin(float_of_int(k)*.Pi/.3.))+y);
    		done;
    		tab;
    	in
    	let tab1 = sommets r in
    	for k=0 to 5 do
    		set_color c2;
    		let x,y = tab1.(k) in
    		draw_arc x y (int_of_float(r)) (int_of_float(r)) (k*180/3 + 2*180/3) (k*180/3 + 4*180/3);
    	done;;
    qui me permet par la même occasion de régler le rayon du disque, les couleurs de fond et de la rosace, et la position du centre enfin.
    Bref ! Voilà le coeur de la question : j'aimerais que les "pétales" de ma rosace soient remplis avec une certaine couleur, et pas simplement le contour !!

    J'ai essayé quelques trucs en mettant des "fill_ellipse" dans le pétale, mais c'est très très très moche ; et je pensais à réaliser un remplissage de la zone un peu style intégrale, en hachurant avec des rectangles élémentaires très proches les uns des autres : mais ça me semble un peu "bourrin" !

    Aussi j'aimerais savoir si quelqu'un aurait une idée de comment faire ça joliment ?

    Je vous remercie d'avance !!

    P.S : le bout de code pourra peut-être sembler grossier, mais bon, ça ne fait qu'un an ! Sur ce point je suis ouvert à toute proposition !!!

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Ma question n'a guère été inspirante je vois ...

    J'ai toutefois trouvé de moi même la réponse que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    let rosace r c1 c2 a b =
    	set_color c1 ;
    	fill_circle a b (int_of_float(r));
    	for k= (-1) to 0 do
    		set_color c2 ;
    		draw_circle a b (int_of_float(r)+k);
    	done;
    	let sommets r =
    		let tab = make_vect 6 (0,0) in
    		for k=0 to 5 do
    			tab.(k) <- (int_of_float(r*.cos(float_of_int(k)*.Pi/.3.))+a,int_of_float(r*.sin(float_of_int(k)*.Pi/.3.))+b);
    		done;
    		tab;
    	in
    	let tab1 = sommets r in
    	for k=0 to 5 do
    		set_color c2;
    		let x,y = tab1.(k) and p = k*180/3 in
    		draw_arc x y (int_of_float(r)) (int_of_float(r)) (p + 2*180/3) (p + 4*180/3);
    	done;
    	let full c3 x y =
    		let i = ref 0 in
    		while (point_color x (y+(!i))) = background do
    			set_color c3;
    			plot x (y+(!i));
    			incr i;
    		done;
    		let j = ref 1 in
    		while (point_color x (y-(!j))) = background do
    			set_color c3;
    			plot x (y-(!j));
    			incr j;
    		done;
    	in
    	let rec t_full c = fun
    		| x y when (point_color x y <> c) && (point_color (x+1) y = c) && x>a -> if y>b then (t_full c x (y+1)) else (t_full c x (y-1));
    		| x y when (point_color x y <> c) && (point_color (x-1) y = c) && x<a -> if y>b then (t_full c x (y+1)) else (t_full c x (y-1));
    		| x y when (point_color x y <> c) && x>a -> full c x y; t_full c (x+1) y ;
    		| x y when (point_color x y <> c) && x<a -> full c x y; t_full c (x-1) y ;
    		| _ _ -> ();
    	in
    	t_full c2 (a+4) (b+1) ;
    	t_full c2 (a+2) (b-3) ;
    	t_full c2 (a+2) (b+3);
    	t_full c2 (a-4) b ;
    	t_full c2 (a-3) (b-3);
    	t_full c2 (a-3) (b+3);;
    Enjoy

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rosace partitionnée cliquable
    Par eddynamique dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 28/10/2013, 15h15
  2. Afficher une rosace
    Par bobbyy dans le forum C
    Réponses: 4
    Dernier message: 15/01/2009, 22h43
  3. Génération de la rosace avec birt ?
    Par Marqui@Giani dans le forum BIRT
    Réponses: 1
    Dernier message: 12/03/2008, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo