Flocon

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 !
maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

Flocon

Message non lu par maurice » sam. 27 mars 2010, 19:18

Bonjour,

novice avec asymptote et nouveau sur ce forum.
Me disant qu'il n'y a qu'en pratiquant qu'on progresse, j'ai essayé de faire un script pour dessiner le flocon de Van Koch.
Le voici :

Code : Tout sélectionner

// Flocon de Van Koch avec Asymptote


//Taille de l'image
size(10cm,0);

//Nombre d'itérations
int iteration;
iteration=5;

//Nombre de sommets
int n;
n=3;

//Définition des sommets du triangle initial
pair[] pA = {(0,0),
        (1,0),
        (1/2,sqrt(3)/2)};

//Tracé du cercle circonscrit
pair I,O;
I=((pA[0]+pA[1])/2);
O=((2*I+pA[2])/3);
draw(circle(O,2*sqrt(3)/6));


//Calcul du périmètre et calcul de l'aire initiaux
real perimetre;
perimetre = 3;

real aire;
aire = sqrt(3)/4;


//iteration
for (int k=1; k<=iteration; ++k) {

//Initialisation du nouveau pA
pair[] pD=new pair[4*n];
for (int i=0; i<=n-1; ++i) {
   if (i<n-1)
      {pD[4*i+0] = pA[i];
      pD[4*i+1] = (2*pA[i]+pA[i+1])/3;
      pD[4*i+2] = rotate(-60,(2*pA[i]+pA[i+1])/3)*((pA[i]+2*pA[i+1])/3);
      pD[4*i+3] = (pA[i]+2*pA[i+1])/3;
   }
   else
      {pD[4*i+0] = pA[i];
      pD[4*i+1] = (2*pA[i]+pA[0])/3;
      pD[4*i+2] = rotate(-60,(2*pA[i]+pA[0])/3)*((pA[i]+2*pA[0])/3);
      pD[4*i+3] = (pA[i]+2*pA[0])/3;
   }
}
pA=pD;


//Nouveau nombres de sommets
n = 4*n;

//Calcul du périmètre
perimetre = perimetre*(1+1/3);
}


//Tracé des triangles
for (int i=0; i<=n-1; ++i) {
   if (i<n-1)
      {draw(pA[i]--pA[i+1]);
      }
   else {draw(pA[i]--pA[0]);
   }
}


//Affichage du périmètre
label("p\'erim\`etre : ", (0.5,-0.35),W);
label(string(perimetre), (0.5,-0.35),E);


débutant, je suis bien sur interressé par toute les remarques ou suggestion qu'on pourra me faire.

Par ailleur le script marche bien et est rapide pour iteration = 6.
A iteration = 8, il est déjà beaucoup plus long et à partir de iteration=9, j'ai l'impression que l'ordi tourne en rond.
A quoi cela peut-il être du a votre avis ?

Maurice
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

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

Re: Flocon

Message non lu par GM » sam. 27 mars 2010, 19:28

maurice a écrit :débutant, je suis bien sur interressé par toute les remarques ou suggestion qu'on pourra me faire.

Par ailleur le script marche bien et est rapide pour iteration = 6.
A iteration = 8, il est déjà beaucoup plus long et à partir de iteration=9, j'ai l'impression que l'ordi tourne en rond.
A quoi cela peut-il être du a votre avis ?


Pas le temps de tester à l'instant présent... mais je peux donnerune source d'inspiration différente.

Code : Tout sélectionner

pair z0=(1,0); 
pair z1=rotate(120)*z0;
pair z2=rotate(120)*z1;
koch(z0,z1,2,red);
koch(z1,z2,3,blue);
koch(z2,z0,4,green);

donne cela :

Figure asymptote 115f6f04012edd8b42d8371af498cce3
*** 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(250);
  2. void koch(pair A, pair B, int n, pen stylo=black) {
  3. pair C;
  4. C=rotate(120, point(A--B,1/3))*A;
  5. if (n>0) {
  6. koch(A,point(A--B,1/3),n-1,stylo);
  7. koch(point(A--B,1/3),C,n-1,stylo);
  8. koch(C,point(A--B,2/3),n-1,stylo);
  9. koch(point(A--B,2/3),B,n-1,stylo);
  10. }
  11. else draw(A--point(A--B,1/3)--C--point(A--B,2/3)--B,stylo);
  12. }
  13. pair z0=(1,0);
  14. pair z1=rotate(120)*z0;
  15. pair z2=rotate(120)*z1;
  16. koch(z0,z1,2,red);
  17. koch(z1,z2,3,blue);
  18. koch(z2,z0,4,green);
  19.  
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 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

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

Re: Flocon

Message non lu par GM » sam. 27 mars 2010, 19:38

Exemple précédent modifié !
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 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Avatar du membre
pivaldi
V.I.P.
V.I.P.
Messages : 24
Enregistré le : jeu. 11 mars 2010, 21:09
Contact :

Re: Flocon

Message non lu par pivaldi » sam. 27 mars 2010, 19:40

GM a écrit :Pas le temps de tester à l'instant présent... mais je peux donnerune source d'inspiration différente.

Idem.
Par L-System
Par récursion

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

Re: Flocon

Message non lu par GM » sam. 27 mars 2010, 19:57

pivaldi a écrit :
GM a écrit :Pas le temps de tester à l'instant présent... mais je peux donnerune source d'inspiration différente.

Idem.
Par L-System
Par récursion

Maurice aura remarqué le commentaire précisant l'auteur sur l'exemple dont j'ai donné le lien : c'est ton exemple récursif que je citais. :-)

Je viens d'ajouter de la couleur ci-dessus pour bien voir les trois parties.

Quand on voit ce que donne p=4... je crois qu'il est inutile de monter jusque 8.
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 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

Re: Flocon

Message non lu par maurice » sam. 27 mars 2010, 20:42

Merci pour les sources d'inspiration, je vais essayer de décortiquer tout ca.
je crois que pour Lsystem je vais attendre un peu d'être famalliarisé avec les trucs plus basiques d'Asymptote !

Maurice
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

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

Re: Flocon

Message non lu par GM » sam. 27 mars 2010, 21:36

maurice a écrit :je crois que pour Lsystem je vais attendre un peu

L'extension est créée : Philippe l'a faite.
Donc si tu devais t'y intéresser... ce ne serait plus un problème d'asymptote : il suffirait de regarder cette jolie galerie de Philippe et de lire des choses comme ceci sur wikipedia, pour comprendre la syntaxe des chaines à passer à la fonction Lsystem.
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 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Répondre