Page 1 sur 1

Tapis de Sierpinsky

Posté : mar. 13 mars 2012, 17:07
par Fabrice
Bonjour,
Pour les besoins d'une petite activité sur les suites géométriques, j'ai écrit rapidement (sans chercher à optimiser), le code suivant :

Figure asymptote 9ccbf63448c71028c83cbb915fa6e046
*** 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
  1. import geometry;
  2. unitsize(1cm,1cm);
  3. real u=1/3;
  4. int n=4;
  5. real N=(8^n-1)/7;
  6. pair z1=(0,0),z2=(6,0),z3=(6,6),z4=(0,6),z5=(z1+z2)/2,z6=(z2+z3)/2,z7=(z3+z4)/2,z8=(z4+z1)/2;
  7. path C[]={z1--z2--z3--z4--cycle};
  8. for(int k=0; k<N; ++k){
  9. filldraw(C[k],white,red);
  10. pair Z[]={point(C[k],0),point(C[k],1),point(C[k],2),point(C[k],3),(point(C[k],0)+point(C[k],1))/2,(point(C[k],1)+point(C[k],2))/2,(point(C[k],2)+point(C[k],3))/2,(point(C[k],3)+point(C[k],0))/2};
  11. for(int i=0; i<Z.length; ++i){
  12. C.append(scale(u,Z[i])*C[k]);
  13. filldraw(scale(u,Z[i])*C[k],red,red);
  14. }}

J'ai testé la compilation à l'étape 6, ça rame dur !!
Merci.

Re: Tapis de Sierpinsky

Posté : mar. 13 mars 2012, 17:57
par GM
J'avais cela en stock... et beaucoup d'autres fractales... si tu en cherches : ma fille a fait un TPE sur le sujet.

Il y a une question avec ton message ? Peut-être une indirecte en rapport avec ceci :
Fabrice a écrit :J'ai testé la compilation à l'étape 6, ça rame dur !! Merci.

Cela va être le problème de beaucoup de fractales : croissance exponentielle des calculs... qui va faire croitre exponentiellement le temps... pour finir rapidement en un "out of memory".

Re: Tapis de Sierpinsky

Posté : mar. 13 mars 2012, 18:05
par GM

Figure asymptote dd878f119a0ae114ca1628f4d99024ba
*** 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
  1. size(0,300);
  2.  
  3. //////////////////////////////////
  4. void Sierpinski(pair A, real s, int q, bool top=true)
  5. {
  6. pair B=A+s, C=A+(s,s), D=C-s;
  7. if(top) draw(A--B--C--D--cycle);
  8. draw((2A+C)/3--(2B+D)/3--(2C+A)/3--(2D+B)/3--cycle);
  9. if(q > 0) {
  10. Sierpinski(A,s/3,q-1,false);
  11. Sierpinski((2A+B)/3,s/3,q-1,false);
  12. Sierpinski((A+2B)/3,s/3,q-1,false);
  13. Sierpinski((2A+4B+D+2C)/9,s/3,q-1,false);
  14. Sierpinski((A+2C)/3,s/3,q-1,false);
  15. Sierpinski((2A+B+4D+2C)/9,s/3,q-1,false);
  16. Sierpinski((A+2D)/3,s/3,q-1,false);
  17. Sierpinski((2A+D)/3,s/3,q-1,false);
  18. }
  19. }
  20. //////////////////////////////////
  21.  
  22. Sierpinski((0,1),1,5);

Re: Tapis de Sierpinsky

Posté : mar. 13 mars 2012, 18:32
par Fabrice
Salut,
GM a écrit :si tu en cherches : ma fille a fait un TPE sur le sujet

Pourquoi pas ?

GM a écrit :Il y a une question avec ton message ?

C'était de voir si une amélioration du code que j'avais proposé pouvait accélérer la compilation. Ton code (avec de la récursivité) me semble compiler un poil plus vite, mais rencontre le même problème que le mien avec q= 7 (n=6 chez moi).