Polyamants

Règles du forum
ATTENTION ! Il est demandé de ne déposer dans ce forum que des exemples en langage Asymptote
  • finalisés
  • que l'on pense intéressants et optimisés
  • et qui se rapportent au thème du forum.
Si certains exemples déposés donnent lieu à de nombreuses modifications, ils seront déplacés et remplacés par un nouveau sujet dans ce forum avec la ou les meilleures propositions.
Pour les demandes d'aide ... il y a un forum spécifique !
mumblee
Messages : 47
Enregistré le : jeu. 11 mars 2010, 10:29
Localisation : Lille

Polyamants

Message non lu par mumblee » ven. 13 sept. 2013, 10:07

Bonjour,

Figure issue d'un exercice donnée à mes cinquièmes : Trouver et représenter les douze hexamants différents.

Ce n'est pas tous les jours que je m'essaie à utiliser des "struct" donc le code ne doit pas être terrible (j'ai toujours du mal à comprendre les initialisations de tableaux).

Merci par avance de vos avis éclairés.

Figure asymptote e3ec85a3ac068e7f7af0e0a95da669f2
*** 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);
  3.  
  4. // Les douze hexamants. Voir <!-- m --><a class="postlink" href="http://www.recreomath.qc.ca/dict_hexamant.htm">http://www.recreomath.qc.ca/dict_hexamant.htm</a><!-- m -->
  5. triangle t1=triangleabc(1,1,1), t2=rotate(180,((point)t1.VB+(point)t1.VC)/2)*t1;
  6. vector u=(point)t1.VB-(point)t1.VA, v=(point)t1.VC-(point)t1.VA, w=(2*v-u)/2;
  7.  
  8. struct monamant {
  9. int sens; // 1;2 pour le triangle t1 respectivement t2
  10. int tu; // Abscisse dans (O,u,v)
  11. int tv; // Ordonnée dans (O,u,v)
  12.  
  13. void operator init(int sens, int tu, int tv){
  14. this.sens=sens;
  15. this.tu=tu;
  16. this.tv=tv;
  17. }
  18. }
  19.  
  20. struct polyamant {
  21. string nom;
  22. monamant[] Monamants;
  23.  
  24. void operator init(string nom, monamant[] Monamants=new monamant[]){
  25. this.nom=nom;
  26. this.Monamants=Monamants;
  27. }
  28. }
  29.  
  30. void DessinePolyamant(polyamant p=polyamant(nom="Monamant", Monamants=new monamant[] {monamant(1,0,0)}), point Origine=(0,0)){
  31. write(p.nom);
  32. for(int i=0; i<p.Monamants.length; ++i){
  33. if (p.Monamants[i].sens == 1) draw(shift(Origine+p.Monamants[i].tu*u+p.Monamants[i].tv*v)*t1);
  34. else draw(shift(Origine+p.Monamants[i].tu*u+p.Monamants[i].tv*v)*t2);
  35. }
  36. }
  37.  
  38. polyamant p1=polyamant("rhomboide",new monamant[] {monamant(1,0,0),monamant(1,1,0),monamant(1,2,0),monamant(2,0,0),monamant(2,1,0),monamant(2,2,0)});
  39. polyamant p2=polyamant("houlette",new monamant[] {monamant(1,0,0),monamant(1,1,0),monamant(1,1,1),monamant(2,0,0),monamant(2,1,0),monamant(2,-1,0)});
  40. polyamant p3=polyamant("sphinx",new monamant[] {monamant(1,0,0),monamant(1,1,0),monamant(1,2,0),monamant(1,0,1),monamant(2,0,0),monamant(2,1,0)});
  41. polyamant p4=polyamant("couronne",new monamant[] {monamant(1,0,0),monamant(1,1,0),monamant(1,0,1),monamant(2,0,0),monamant(2,1,0),monamant(2,-1,0)});
  42. polyamant p5=polyamant("yacht",new monamant[] {monamant(1,0,0),monamant(1,1,0),monamant(1,0,1),monamant(1,-1,1),monamant(2,0,0),monamant(2,-1,0)});
  43. polyamant p6=polyamant("pistolet",new monamant[] {monamant(1,0,0),monamant(1,1,0),monamant(1,0,1),monamant(2,0,0),monamant(2,0,1),monamant(2,-1,0)});
  44. polyamant p7=polyamant("chevron",new monamant[] {monamant(1,0,0),monamant(1,1,0),monamant(1,1,1),monamant(2,0,0),monamant(2,1,0),monamant(2,1,1)});
  45. polyamant p8=polyamant("homard",new monamant[] {monamant(1,0,0),monamant(1,1,0),monamant(1,0,1),monamant(2,0,0),monamant(2,1,0),monamant(2,0,1)});
  46. polyamant p9=polyamant("hamecon",new monamant[] {monamant(1,0,0),monamant(1,1,0),monamant(1,1,1),monamant(2,0,0),monamant(2,1,0),monamant(2,0,1)});
  47. polyamant p10=polyamant("papillon",new monamant[] {monamant(1,0,0),monamant(1,1,0),monamant(1,0,1),monamant(2,0,0),monamant(2,-1,0),monamant(2,0,-1)});
  48. polyamant p11=polyamant("serpent",new monamant[] {monamant(1,0,0),monamant(1,1,0),monamant(1,1,1),monamant(2,0,0),monamant(2,1,0),monamant(2,0,-1)});
  49. polyamant p12=polyamant("hexagone",new monamant[] {monamant(1,0,0),monamant(1,0,1),monamant(1,-1,1),monamant(2,0,0),monamant(2,-1,0),monamant(2,-1,1)});
  50.  
  51. DessinePolyamant(p1);
  52. DessinePolyamant(p2,5u);
  53. DessinePolyamant(p3,8u);
  54. DessinePolyamant(p4,12u);
  55. DessinePolyamant(p5,u-3w);
  56. DessinePolyamant(p6,5u-3w);
  57. DessinePolyamant(p7,8u-3w);
  58. DessinePolyamant(p8,12u-3w);
  59. DessinePolyamant(p9,-6w);
  60. DessinePolyamant(p10,5u-6w);
  61. DessinePolyamant(p11,8u-6w);
  62. DessinePolyamant(p12,12u-6w);
Fabrice Eudes
Debian Bullseye 11.4, Asymptote 2.79, texlive 2022, Emacs 27.1

Répondre