quelques routines..

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 :

Re: quelques routines..

Message non lu par maurice » jeu. 6 déc. 2012, 14:00

GM a écrit :Si la ligne suivante donne 65 :

Code : Tout sélectionner

write(ascii("A"));

c'est celle-ci qui donne A :

Code : Tout sélectionner

write(format("%c", 65));


une application qui m'est venu hier.
j'avais un pavage :

Figure asymptote 14b5137250db671e3fe94769bc99cd20
*** 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 math;
  2. unitsize(0.5cm);
  3. add(grid(18,15,gray));
  4.  
  5.  
  6.  
  7.  
  8. pen p=linewidth(1pt)+magenta;
  9.  
  10. pair p1=(1,1), p2=(5,1), p3=(4,5), p4=(2,4);
  11. path motif=p1--p2--p3--p4--cycle;
  12. picture pic;
  13.  
  14. for(int i=0; i<5; ++i) {
  15. path motif=p1--p2--p3--p4--cycle;
  16. draw(pic, motif, p);
  17. pair centre=(p2+p3)/2;
  18. transform s=rotate(180, centre);
  19. pair p0=p2;
  20. p3=s*p1;
  21. p2=s*p4;
  22. p4=s*p0;
  23. p1=s*p4;
  24. }
  25.  
  26. add(pic);
  27. add(shift(0,7)*pic);
  28. add(rotate(180,(9,5.5))*pic);


il me restait à écrire tous les noms de points (de A à X !). Je me voyais déjà écrire 23 fois la même ligne.
Du coup je me suis amusé à utiliser format("%c", 65));

Pas sur que j'ai gagné en temps mais ça a fait un bon exercice.
Ca reste laborieux si on veut changer la place du label par rapport à la position du point mais bon !
Ici, tous les labels sont positionnés au NW sauf ceux à droite et en bas.

Figure asymptote e851e580c9d5de12e4a7fe4a63fda043
*** 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 math;
  2. unitsize(0.5cm);
  3. add(grid(18,15,gray));
  4.  
  5.  
  6.  
  7.  
  8. pen p=linewidth(1pt)+magenta;
  9.  
  10. pair p1=(1,1), p2=(5,1), p3=(4,5), p4=(2,4);
  11. path motif=p1--p2--p3--p4--cycle;
  12. picture pic;
  13.  
  14. for(int i=0; i<5; ++i) {
  15. path motif=p1--p2--p3--p4--cycle;
  16. draw(pic, motif, p);
  17. pair centre=(p2+p3)/2;
  18. transform s=rotate(180, centre);
  19. pair p0=p2;
  20. p3=s*p1;
  21. p2=s*p4;
  22. p4=s*p0;
  23. p1=s*p4;
  24. }
  25.  
  26. add(pic);
  27. add(shift(0,7)*pic);
  28. add(rotate(180,(9,5.5))*pic);
  29.  
  30.  
  31.  
  32.  
  33. string[] pts;
  34.  
  35. for(int i=65; i<89; ++i) {
  36. string s=format("%c", i);
  37. pts.push(s);
  38. }
  39.  
  40. transform t4=shift(2,1), t5=shift(4,0);
  41. pair pA=(2,11);
  42. for(int i=0; i<pts.length; ++i) {
  43. if(i%6==5) label(pts[i], pA, E);
  44. else {
  45. if(quotient(i,6)==3) label(pts[i], pA, S);
  46. else label(pts[i], pA, NW);
  47. }
  48. int p=quotient(i,2)+1;
  49. int q=quotient(i,2);
  50. transform t=((t4)^p)*((t5)^q);
  51. transform t;
  52. if(i%6!=5) {
  53. if(quotient(i,6)==0 || quotient(i,6)==2) {
  54. t=((t4)^(1-i%2))*((t5)^(i%2));
  55. }
  56. else t=((t4)^(i%2))*((t5)^(1-i%2));
  57. }
  58. else {
  59. t=shift(-15,-6);
  60. }
  61. pA=t*pA;
  62. }


A+

Bruno

edit : les commentaires n'apparaissent pas dans les codes, je n'avais jamais remarqué.
Doc 3D
Si ça ne marche pas, essayez la version pdf

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

Répondre