JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Camembert Ven 20 Jan 2012 - 23:22 | |
| Klaus nous a fait une excellente dll pour tracer des camemberts (0% de matières grasses, comme pendant la guerre). Je voulais voir s'il n'y avait pas moyen de faire ça en Panoramic pur (Nardo, tu m'écoutes ? ellipse tracée point par point). J'ai fait une ébauche, juste comme exercice de style, pour voir, évidemment rien d'aussi élaboré que le travail de Klaus: - Code:
-
LABEL Ellipse, Lipse, Tranche, Stra DIM x0%, y0%, x%, y%, a%, b%, h%, pi, t1, t2, cr%, cg%, cb% pi = 4*ATN(1) x0% = 400: y0% = 200
WIDTH 0, 800: HEIGHT 0, 500 ' 2D_LINE 400,0,400,800: 2D_LINE 0,400,800,400: ' axes a% = 300: b% = 100: ' demi grands axes de l'ellipse h% = 50: ' hauteur du camembert cr% = 255: cg% = 255: cb% = 0: GOSUB Ellipse 2D_LINE x0%-a%,y0%,x0%-a%,y0%+h%: 2D_LINE x0%+a%,y0%,x0%+a%,y0%+h% cr% = 128: cg% = 128: cb% = 0: GOSUB Lipse ' les angles sont dans le sens horaire (anti-trigonométrique) t1 = pi/4: t2 = pi/4+pi/6: cr% = 255: cg% = 0: cb% = 0: GOSUB Tranche t1 = t2: t2 = 3*pi/4: cr% = 0: cg% = 255: cb% = 0: GOSUB Tranche t1 = t2: t2 = 5*pi/4: cr% = 0: cg% = 0: cb% = 255: GOSUB Tranche t1 = t2: t2 = 3*pi/2: cr% = 255: cg% = 0: cb% = 255: GOSUB Tranche t1 = t2: t2 = 7*pi/4: cr% = 255: cg% = 255: cb% = 0: GOSUB Tranche t1 = t2: t2 = pi/4: cr% = 0: cg% = 255: cb% = 255: GOSUB Tranche
END
Ellipse: FOR y% = -1*b% TO b% x% = (a%*SQR(b%*b%-y%*y%))/b% 2D_POINT x0%+x%, y0%+y% 2D_POINT x0%-x%, y0%+y% NEXT y% FOR x% = -1*a% TO a% y% = (b%*SQR(a%*a%-x%*x%))/a% 2D_POINT x0%+x%, y0%+y% 2D_POINT x0%+x%, y0%-y% NEXT x% 2D_FLOOD x0%,y0%,255,255,0: ' coloriage de l'ellipse RETURN
Lipse: ' 1/2 ellipse FOR y% = -1*b% TO b% x% = (a%*SQR(b%*b%-y%*y%))/b% IF y%>=0 2D_POINT x0%+x%, y0%+y%+h% 2D_POINT x0%-x%, y0%+y%+h% END_IF NEXT y% FOR x% = -1*a% TO a% y% = (b%*SQR(a%*a%-x%*x%))/a% IF y%>=0 THEN 2D_POINT x0%+x%, y0%+y%+h% NEXT x% 2D_FLOOD x0%,y0%+b%+1,cr%,cg%,cb%: ' coloriage de la paroi RETURN
Tranche: DIM x1%, y1% x% = x0% + a%*COS(t1) y% = y0% + b%*SIN(t1) 2D_LINE x0%,y0%,x%,y%: ' rayon 1 IF y%>y0% THEN 2D_LINE x%,y%,x%,y%+h% x1% = x0% + a%*COS(t2) y1% = y0% + b%*SIN(t2) 2D_LINE x0%,y0%,x1%,y1%: ' rayon 2 IF y1%>y0% THEN 2D_LINE x1%,y1%,x1%,y1%+h% 2D_FLOOD ABS((x1%+x%)/2),ABS((y1%+y%)/2),cr%,cg%,cb%: ' surface de la tranche IF t1>pi AND t2>pi THEN GOTO Stra IF t1 <= pi AND t2 <= pi 2D_FLOOD x%-1,y%+1, cr%/2,cg%/2,cb%/2 ELSE IF t1 < pi AND t2>=pi 2D_FLOOD x%-1,y%+1, cr%/2,cg%/2,cb%/2 ELSE IF t1>=pi AND t2 <= pi 2D_FLOOD x1%+1,y1%+1, cr%/2,cg%/2,cb%/2 END_IF END_IF END_IF Stra: FREE x1%: FREE y1% RETURN Il y a un os: la 1/2 ellipse du bas (dessous du camembert) ne doit pas être étanche, puisque le 2D_FLOOD déborde sur toute la Form.
Dernière édition par JL35 le Sam 21 Jan 2012 - 15:33, édité 3 fois | |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Camembert Sam 21 Jan 2012 - 0:05 | |
| Je serais toi, je tracerais plutôt des lignes entre tes points pour faire éventuellement moins de points (et donc augmenter la vitesse du tracé) et pour assurer l'étanchéité du tracé pour le remplissage | |
|
exdragon
Nombre de messages : 601 Date d'inscription : 05/01/2012
| Sujet: Re: Camembert Sam 21 Jan 2012 - 6:20 | |
| En tous cas, c'est pas mal comme travail, c'est fou ce qu'on peut faire avec panoramic ^^
| |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Camembert Sam 21 Jan 2012 - 10:07 | |
| @Jicehel pour l'étanchéité tu as sans doute raison, mais pour la rapidité d'exécution à mon avis ça n'entre pas en ligne de compte, le tracé est instantané, ce n'est pas comme si il y en avait des centaines à dessiner. Et puis la définition serait moins bonne, ou alors il faut multiplier les lignes et ça revient au même. Mais rien n'empêche d'essayer ! là c'était juste pour voir si c'était possible | |
|
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Camembert Sam 21 Jan 2012 - 10:27 | |
| Je t'écoute, je t'écoute !!! Oui en effet, je me suis amusé aussi à essayer de le faire en Panoramic pur... Comme je suis sur autre chose, j'ai laissé tombé... Mais c'est bien que quelqu'un ce soit lancé dans l'aventure... | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Camembert Sam 21 Jan 2012 - 13:29 | |
| Bon, me voilà nommé explorateur en chef ! je poursuis mes études... Petit rappel de mathématiques élémentaires: Equation de l'ellipse: a et b étant les demi grands axes de l'elipse ('rayon' horizontal et vertical), on a - Code:
-
x*x/a*a + y*y/b*b = 1 Coordonnées d'un point de l'ellipse en fonction de l'angle t (dans le sens horaire): - Code:
-
x = x0 + a*cos(t) y = y0 + b*sin(t) x0 et y0 étant les coordonnées du centre de l'ellipse. A partir de là on peut tout faire. Maintenant je vais voir avec mon plombier pour colmater la fuite. | |
|
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Camembert Sam 21 Jan 2012 - 13:32 | |
| Un vrai Matheu le petit jeunot. | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Camembert Sam 21 Jan 2012 - 14:21 | |
| Merci pour le jeunot... il y a quelques décennies que ça ne m'était pas arrivé ! Le plombier a trouvé la fuite, en fait c'était tout bête (comme souvent), je faisais le remplissage de couleur avant d'avoir fermé les côtés... alors ça fuyait de partout ! Edit: voilà, j'ai fait des secteurs colorés, il sera facile de calculer l'angle des secteurs à donner en fonction d'un tableau de valeurs, et d'ajouter des commentaires. J'ai dessiné la figure sur le Form 0 pour faire vite, mais ce serait mieux sur un Picture dédié. Voilà, je ne vois rien d'autre à ajouter, pour le moment. | |
|