Nom de fichier et fonction void()

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

Nom de fichier et fonction void()

Message non lu par Fabrice » jeu. 14 févr. 2013, 18:18

Bonsoir,
Je ne sais pas si le titre est bien choisi, mais je vais essayé d'expliquer ce que je souhaiterais faire.
J'ai écrit la fonction suivante :

Figure asymptote c3b37f19124a42bf1fa356adfb571294
*** 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. unitsize(1cm);
  2. import geometry;
  3. void Triangle (int a){
  4. pair z0=(0,0);
  5. pair z1=z0+a;
  6. pair z2=a/2*(1,sqrt(3));
  7. pair[] Z1={};
  8. pair[] Z2={};
  9. pair[] Z3={};
  10. filldraw(z0--z1--z2---cycle,yellow,blue);
  11. for(int i=1 ; i<a; ++i){
  12. Z1.push(scale(i/a,z0)*z1);
  13. Z2.push(scale(i/a,z1)*z2);
  14. Z3.push(scale(i/a,z0)*z2);
  15. }
  16. for(int i=0 ; i<=a-2 ; ++i){
  17. draw(Z3[i]--Z2[i],blue);
  18. draw(Z1[i]--Z3[i],blue);
  19. draw(Z1[i]--Z2[a-2-i],blue);
  20. }}
  21.  
  22. Triangle(4);

Première question :
le fichier qui contient ce code se nomme fig5_ds4.asy. Si je le compile, il porte toujours ce nom, et ceci quelque soit la valeur de a choisie pour la fonction Triangle(a). Je dois compiler ce code quatre fois pour les valeurs a=1, a=2, a=3, a=4. Comment faire pour avoir quatre noms de fichiers différents ?

Deuxième question :
Les quatre figures créées, je souhaiterais les placer côte à côte (ou du moins sur la même ligne de base) dans une seule figure.
Suis-je clair ?
Merci.
Debian Strech + Asymptote 2.42-12 + Emacs24 + TeXLive 2017

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

Re: Nom de fichier et fonction void()

Message non lu par maurice » jeu. 14 févr. 2013, 19:14

Bonsoir

Pour avoir tout dans le même pdf tu peux ajouter un paramètre dans ta fonction triangle :

Figure asymptote b08fe5924aa8351c56914ed7ee2776ee
*** 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. unitsize(1cm);
  2. import geometry;
  3. void Triangle (int a, pair pos=(0,0)){
  4. transform t=shift(pos);
  5. pair z0=(0,0);
  6. pair z1=z0+a;
  7. pair z2=a/2*(1,sqrt(3));
  8. pair[] Z1={};
  9. pair[] Z2={};
  10. pair[] Z3={};
  11. filldraw(t*(z0--z1--z2---cycle),yellow,blue);
  12. for(int i=1 ; i<a; ++i){
  13. Z1.push(scale(i/a,z0)*z1);
  14. Z2.push(scale(i/a,z1)*z2);
  15. Z3.push(scale(i/a,z0)*z2);
  16. }
  17. for(int i=0 ; i<=a-2 ; ++i){
  18. draw(t*(Z3[i]--Z2[i]),blue);
  19. draw(t*(Z1[i]--Z3[i]),blue);
  20. draw(t*(Z1[i]--Z2[a-2-i]),blue);
  21. }}
  22. Triangle(1);
  23. Triangle(2,1);
  24. Triangle(3,3);
  25. Triangle(4,6);


ou t'inspirer de ce qui est .

Par contre, pour faire 4 pdf avec un seul fichier .asy, je ne sais pas !

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

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

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

Re: Nom de fichier et fonction void()

Message non lu par Fabrice » jeu. 14 févr. 2013, 19:20

Bonsoir Maurice,
Cela répond en partie à ce que je veux faire, merci.
Petite question :
je pensais qu'il fallait faire :

Code : Tout sélectionner

Triangle(3,(3,0))
Debian Strech + Asymptote 2.42-12 + Emacs24 + TeXLive 2017

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

Re: Nom de fichier et fonction void()

Message non lu par maurice » jeu. 14 févr. 2013, 19:37

Fabrice a écrit :Petite question :
je pensais qu'il fallait faire :

Code : Tout sélectionner

Triangle(3,(3,0))


Bonne question ! Je ne m'en étais même pas rendu compte et ce n'étais pas volontaire !

J'ai regardé la doc et je suppose que ça vient de là :

Asymptote makes extensive use of affine transforms. A pair (x,y) is transformed by the transform t=(t.x,t.y,t.xx,t.xy,t.yx,t.yy) to (x’,y’), where
x’ = t.x + t.xx * x + t.xy * y
y’ = t.y + t.yx * x + t.yy * y


et

The implicit initializer for transforms is identity().


???

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

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

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

Re: Nom de fichier et fonction void()

Message non lu par maurice » jeu. 14 févr. 2013, 19:54

maurice a écrit :je suppose que ça vient de là


En fait non, en ligne de commande, on voit se qui se passe :

Code : Tout sélectionner

$ asy
Welcome to Asymptote version 2.22svn-r5544 (to view the manual, type help)
> pair a=2
> a
(2,0)
>


Ça concernait le type pair et pas les transformations !

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

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

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

Re: Nom de fichier et fonction void()

Message non lu par Fabrice » jeu. 14 févr. 2013, 20:49

Bonsoir,
Je souhaiterais afficher sous les triangles : T1, T2, T3. Il y a un petit soucis : je ne sais pas comment faire pour que le paramètre a soit pris en compte par la routine label().

Figure asymptote 79e7901ae782c844c95e30b415e6d676
*** 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. unitsize(1cm);
  2. import geometry;
  3. void Triangle (int a, pair pos=(0,0)){
  4. transform t=shift(pos);
  5. pair z0=(0,0);
  6. pair z1=z0+a;
  7. pair z2=a/2*(1,sqrt(3));
  8. pair[] Z1={};
  9. pair[] Z2={};
  10. pair[] Z3={};
  11. filldraw(t*(z0--z1--z2---cycle),green,blue);
  12. for(int i=1 ; i<a; ++i){
  13. Z1.push(scale(i/a,z0)*z1);
  14. Z2.push(scale(i/a,z1)*z2);
  15. Z3.push(scale(i/a,z0)*z2);
  16. }
  17. for(int i=0 ; i<=a-2 ; ++i){
  18. draw(t*(Z3[i]--Z2[i]),blue);
  19. draw(t*(Z1[i]--Z3[i]),blue);
  20. draw(t*(Z1[i]--Z2[a-2-i]),blue);
  21. }label("\textbf{T\boldmath{$_{a}$}}",pos+a/2,2*S);}
  22.  
  23. Triangle(1,(0,0));
  24. Triangle(2,(2,0));
  25. Triangle(3,(5,0));

Merci.
Debian Strech + Asymptote 2.42-12 + Emacs24 + TeXLive 2017

Avatar du membre
chellier
Messages : 104
Enregistré le : jeu. 18 mars 2010, 17:30

Re: Nom de fichier et fonction void()

Message non lu par chellier » jeu. 14 févr. 2013, 21:07

Fabrice a écrit :Bonsoir,
Je souhaiterais afficher sous les triangles : T1, T2, T3. Il y a un petit soucis : je ne sais pas comment faire pour que le paramètre a soit pris en compte par la routine label().

Bonsoir,
C'est possible avec la commande format :

Code : Tout sélectionner

label(format("\textbf{T\boldmath{$_{%i}$}}",a),pos+a/2,2*S);}


Christophe

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

Re: Nom de fichier et fonction void()

Message non lu par Fabrice » ven. 15 févr. 2013, 16:49

Bonjour,
chellier a écrit :C'est possible avec la commande format :

Merci Christophe.
Debian Strech + Asymptote 2.42-12 + Emacs24 + TeXLive 2017

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

Re: Nom de fichier et fonction void()

Message non lu par GM » sam. 16 févr. 2013, 18:17

Bonjour,

j'ai lu que le problème a été résolu par un autre biais... mais j'ai vu passer cette question :

Fabrice a écrit :Comment faire pour avoir quatre noms de fichiers différents ?


... auquel je donne une réponse pour des figures en devenir.

On peut avoir plusieurs fichiers-images d'une figure évolutive... à partir d'un seul script :

  1. Avec la commande suivante en fin d'une boucle de compteur k

    Code : Tout sélectionner

    shipout("fig_"+string(k));
    lorsque les éléments sont dessinés dans currentpicture... qu'il faut penser à vider avant de passer à la figure suivante ;


  2. Avec la commande suivante en fin d'une boucle de compteur k

    Code : Tout sélectionner

    shipout("fig_"+string(k),pic);
    si pic est une nouvelle instance de picture à chaque début de boucle, dans laquelle sont dessinés les objets de la boucle.

Et il y aurait des variantes... pour notamment ne venir ajouter à une figure que ce qui manque dans la précédente.
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 !

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

Re: Nom de fichier et fonction void()

Message non lu par Fabrice » sam. 16 févr. 2013, 22:48

Bonsoir Gaetan,
Peux-tu tester avec mon code, car chez moi, je n'obtiens pas des fichiers contenant les figures attendues ?
Merci.
Debian Strech + Asymptote 2.42-12 + Emacs24 + TeXLive 2017

Répondre