Tapis de Sierpinsky

Pour toute demande d'aide sur des exemples non finalisés, c'est ici.
Les exemples aboutis et intéressants seront ajoutés aux sous-forums qui suivent.

Règles du forum
Pour toute demande d'aide pour la conception (ou la confirmation d'un code) d'une figure Asymptote, c'est ici.

J'invite ceux qui ont régulièrement des questions à poser à aller dans leur panneau de l'utilisateur pour indiquer dans la signature de leurs messages :

  1. Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
  2. Version d'Asymptote et éditeur utilisé pour les figures Asymptote
  3. Distribution LaTeX et éditeur utilisé pour les tex.


On va gagner du temps dans les réponses !
Fabrice
Messages : 118
Enregistré le : sam. 13 mars 2010, 11:41

Tapis de Sierpinsky

Message non lu par Fabrice » mar. 13 mars 2012, 17:07

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.
Modifié en dernier par Fabrice le mar. 13 mars 2012, 18:33, modifié 1 fois.
Debian Strech + Asymptote 2.42-12 + Emacs24 + TeXLive 2017

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1434
Enregistré le : dim. 7 mars 2010, 14:50

Re: Tapis de Sierpinsky

Message non lu par GM » mar. 13 mars 2012, 17:57

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".
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.66)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
Mes autres PC : Ubuntu 18.04LTS - Asymptote(2.66-?? git) + TexLive2018
Mon serveur : Debian Jessie - Asymptote(2.66-? git) + TexLive2018
Merci de préciser la votre !

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1434
Enregistré le : dim. 7 mars 2010, 14:50

Re: Tapis de Sierpinsky

Message non lu par GM » mar. 13 mars 2012, 18:05

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);
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.66)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
Mes autres PC : Ubuntu 18.04LTS - Asymptote(2.66-?? git) + TexLive2018
Mon serveur : Debian Jessie - Asymptote(2.66-? git) + TexLive2018
Merci de préciser la votre !

Fabrice
Messages : 118
Enregistré le : sam. 13 mars 2010, 11:41

Re: Tapis de Sierpinsky

Message non lu par Fabrice » mar. 13 mars 2012, 18:32

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).
Debian Strech + Asymptote 2.42-12 + Emacs24 + TeXLive 2017

Répondre