Ok. Le coup du buildcycle ne marche pas à cause des erreurs d'arrondis.
En effet pour buildcycle, les chemins doivent délimiter une zone connexe, pas de
trou. Or si tu testes
Code : Tout sélectionner
pair[] gg=intersectionpoints(arc(O,pA,pB),arc(pO,1,60,120));
le gg sera vide ! Autrement dit tes deux chemins ne délimitent pas une zone, comme le feraient
deux traits parallèles.
Alors que
Code : Tout sélectionner
pair[] gg=intersectionpoints(arc(O,pA,pB),arc(pO,1,59,121));
draw(gg[0],red+2bp);
draw(gg[1],red+2bp);
fonctionne impec ! C'est assez vicieux ce genre de truc. Ne jamais oublier
que l'on a affaire à du numérique.
Du coup tu peux construire ton buildcycle tranquille avec
Code : Tout sélectionner
path oreille=buildcycle((arc(O,pA,pB)),(arc(pO,1,59,121)));
filldraw(oreille,lightgrey,blue);
Une autre façon serait aussi
Code : Tout sélectionner
path oreille=arc(O,pA,pB)--arc(pO,1,120,60)--cycle;
filldraw(oreille);
En effet, à quoi bon utiliser buildcycle vu que tu connais précisément les deux parties
de ton chemin !
*** 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
- //Fractales: Les oreilles de Mickey avec asymptote 1.92
- import geometry;
- //Taille de l'image
- size(10cm,0);
- void mickey(path p, pair centre, pair O, int n, pen stylo=black) {
- path image, im1, im2;
- transform h=scale(1/sqrt(3),centre);
- image=h*p;
- path oreille1=rotate(-60,O)*image;
- path oreille2=rotate(60,O)*image;
- filldraw(oreille1,lightgrey,blue);
- filldraw(oreille2,lightgrey,blue);
- if (n>0) {
- mickey(oreille1, rotate(-60,O)*centre, rotate(-60,O)*(h*O), n-1,stylo);
- mickey(oreille2, rotate(60,O)*centre, rotate(60,O)*(h*O), n-1, stylo);
- }
- else {
- //path oreille1=rotate(-60,O)*image;
- //path oreille2=rotate(60,O)*image;
- filldraw(oreille1,lightgrey,blue);
- filldraw(oreille2,lightgrey,blue);
- }
- }
- //Triangles de départ
- pair pA,pB,pC,pO,O;
- pA=(0,0);
- pB=(-1,0);
- pC=rotate(60,pB)*pA;
- pO=rotate(60,pA)*pB;
- O=((pA+2*((pB+pC)/2))/3);
- //dot("$A$",pA,N);
- //dot("$B$",pB,S);
- //dot("$C$",pC,W);
- //dot("$O'$",pO,E);
- //dot("$O$",O,SW);
- //draw(arc(O,pA,pB));
- //draw(arc(pO,pA,pB));
- path oreille=arc(O,pA,pB)--arc(pO,1,120,60)--cycle;
- //filldraw(oreille);
- //path oreille=buildcycle((arc(O,pA,pB)),(arc(pO,1,59,121))); //C'Est la le problème
- //pair[] gg=intersectionpoints(arc(O,pA,pB),arc(pO,1,59,121));
- //draw(gg[0],red+2bp);
- //draw(gg[1],red+2bp);
- filldraw(oreille,lightgrey,blue);
- //Définition de l'homothétie
- real k=(sqrt(3))/3;
- pair centre=((O-k*pO)/(1-k));
- //dot("$\Omega$",centre,N);
- transform h=scale(k,centre);
- //Récurssion n=0 pour les oreilles simples
- mickey(oreille,centre,O,1,blue);
- // Ajout d'un cadre, distant des bords de l'image de 3mm
- shipout(bbox(5mm,white));
Cela correspond-il ?
O.G. qui souffre de l'absence de Gaëtan. Oouep trop de vacances !