Page 1 sur 2

Nom de fichier et fonction void()

Posté : jeu. 14 févr. 2013, 18:18
par Fabrice
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.

Re: Nom de fichier et fonction void()

Posté : jeu. 14 févr. 2013, 19:14
par maurice
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

Re: Nom de fichier et fonction void()

Posté : jeu. 14 févr. 2013, 19:20
par Fabrice
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))

Re: Nom de fichier et fonction void()

Posté : jeu. 14 févr. 2013, 19:37
par maurice
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

Re: Nom de fichier et fonction void()

Posté : jeu. 14 févr. 2013, 19:54
par maurice
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

Re: Nom de fichier et fonction void()

Posté : jeu. 14 févr. 2013, 20:49
par Fabrice
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.

Re: Nom de fichier et fonction void()

Posté : jeu. 14 févr. 2013, 21:07
par chellier
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

Re: Nom de fichier et fonction void()

Posté : ven. 15 févr. 2013, 16:49
par Fabrice
Bonjour,
chellier a écrit :C'est possible avec la commande format :

Merci Christophe.

Re: Nom de fichier et fonction void()

Posté : sam. 16 févr. 2013, 18:17
par GM
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.

Re: Nom de fichier et fonction void()

Posté : sam. 16 févr. 2013, 22:48
par Fabrice
Bonsoir Gaetan,
Peux-tu tester avec mon code, car chez moi, je n'obtiens pas des fichiers contenant les figures attendues ?
Merci.