GM a écrit :maurice a écrit :Il y a plus simple ?
Cela dépend : la forme d'une feuille... devait répondre à des critères précis ou tu as choisi une forme approximative en tâtonnant ?
J'ai fait ça un peu au hasard. Je voulais m'amuser à créer des enveloppes pour mettre dans des graphes ; juste pour voir.
GM a écrit :Je me pose d'autres questions : pourquoi cette fonction avec deux points en paramètre ?
Si c'est censé permettre avoir des trèfles plus ou moins allongé... change l'une des coordonnées du second point... et tu verras.
Donc je me demande le pourquoi de ces points en paramètres.
C'est pour pouvoir l'appeler avec les paramètres min(src) et max(src) :
Code : Tout sélectionner
path trefle4(frame dest, frame src=dest, real xmargin=0, real ymargin=xmargin, pen p=currentpen, filltype filltype=UnFill, bool above=true)
{
pair z=(xmargin,ymargin);
int sign=filltype == NoFill ? 1 : -1;
pair h=.5*sign*(max(p)-min(p));
path g=g5(min(src)-h-z,max(src)+h+z);
frame F;
if(above == false) {
filltype.fill(F,g,p);
prepend(dest,F);
} else filltype.fill(dest,g,p);
return g;
}
GM a écrit :Tu parles d'enveloppe : où espères voir le texte dans ce trèfle ?
Au milieu du trèfle, ça ne rend pas terrible mais je ne désespère pas ; et puis pour progresser, il faut bien pratiquer !
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***
- CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
- size(400);
- path g5(pair a, pair b)
- {
- real angle=60;
- pair centre=((a.x+b.x)/2, (4*a.y+3*b.y)/7),
- p1=((3*a.x+b.x)/4, (3*a.y+b.y)/4),
- p2=(a.x, centre.y),
- p3=(p1.x, p2.y+centre.y-p1.y);
- path f1=centre{dir(180+angle)}..{left}p1{left}..{up}p2{up}..{right}p3{right}..{dir(-angle)}cycle;
- path f2=rotate(-90, centre)*(centre{dir(180+angle)}..{left}p1);
- path f3=rotate(90, centre)*(p3{right}..{dir(-angle)}centre);
- real[][] t2=intersections(f1, f2);
- real[][] t3=intersections(f1, f3);
- path feuille=subpath(f1, t3[1][0], t2[1][0]);
- return feuille--rotate(-90,centre)*feuille--rotate(-180,centre)*feuille--rotate(-270, centre)*feuille--cycle;
- // return feuille^^rotate(90,centre)*feuille^^rotate(180,centre)*feuille^^rotate(270, centre)*feuille;
- }
- path trefle4(frame dest, frame src=dest, real xmargin=0, real ymargin=xmargin, pen p=currentpen, filltype filltype=UnFill, bool above=true)
- {
- pair z=(xmargin,ymargin);
- int sign=filltype == NoFill ? 1 : -1;
- pair h=.5*sign*(max(p)-min(p));
- path g=g5(min(src)-h-z,max(src)+h+z);
- frame F;
- if(above == false) {
- filltype.fill(F,g,p);
- prepend(dest,F);
- } else filltype.fill(dest,g,p);
- return g;
- }
- real marge=4;
- object objet_1=draw("Ga\'etan", trefle4, (0,0), xmargin=3, ymargin=5),
- objet_2=draw("2", trefle4, (1,0), xmargin=3, ymargin=5),
- objet_3=draw("3", trefle4, (2,0), xmargin=3, ymargin=5),
- objet_4=draw("Bruno", trefle4, (3,0), marge);
- add(new void(picture pic, transform t) {
- draw(pic, Label("S",align=N), point(objet_1,E,t){N+2*E}..{S+2*E}point(objet_2,W,t),Arrow);
- draw(pic, Label("U", align=S), point(objet_2,W,t){S+2*W}..{N+2*W}point(objet_1,E,t), Arrow);
- draw(pic, Label("P", align=N), point(objet_2,2*W+N,t){N+2*W}..{S+2*W}point(objet_2,2*E+N,t), Arrow);
- draw(pic, Label("C", align=S), point(objet_2,2*W+S,t){S+2*W}..{N+2*W}point(objet_2,2*E+S,t), Arrow);
- draw(pic, Label("E", align=N), point(objet_2,E,t)--point(objet_3,W,t), Arrow);
- draw(pic, Label("N", align=N), point(objet_3,2*W+N,t){N+2*W}..{S+2*W}point(objet_3,2*E+N,t), Arrow);
- draw(pic, Label("E", align=N), point(objet_3,E,t)--point(objet_4,W,t), Arrow);
- });