Page 1 sur 1

Puzzle de Pythagore

Posté : dim. 30 sept. 2012, 11:55
par mumblee
Bonjour,

Ce n'est certes pas inédit, mais je ne l'ai pas trouvé codé en asymptote.

Je prends toute amélioration de mon code de goret ;)

a+

PythagorePuzzle.pdf
Figure obtenue - version noir et blanc
(4.31 Kio) Téléchargé 938 fois


Figure asymptote 4ec0534a518dbdbb97d5cdc0f926bca7
*** 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. // Extensions
  2. import geometry;
  3. import patterns;
  4. unitsize(5mm);
  5.  
  6. // Longueurs des côtés de l'angle droit : à renseigner !
  7. real l1=.4*15,l2=.4*8;
  8.  
  9. real l3=sqrt(l1^2+l2^2);
  10. triangle t;
  11.  
  12. // Test pour partager en 4 pièces le "bon" carré
  13. if (l1 > l2)
  14. {t=triangleabc(l3,l1,l2);}
  15. else
  16. {t=triangleabc(l3,l2,l1);}
  17. point pA=t.VA, pB=t.VB, pC=t.VC;
  18.  
  19. // Hypoténuse parallèle à l'axe des abscisses
  20. transform r=rotate(aTan(length(pC-pA)/length(pB-pA))-180,pA);
  21. triangle t=r*t;
  22. point pA=r*pA, pB=r*pB, pC=r*pC;
  23.  
  24. path carre1=square(pB,pA), carre2=square(pA,pC);
  25. point pO1=rotate(90,(pB+pA)/2)*pA;
  26. point pO2=rotate(90,(pA+pC)/2)*pC;
  27. point pO3=rotate(90,(pC+pB)/2)*pB;
  28. point pF=rotate(-90,pC)*pA, pG=rotate(90,pA)*pC;
  29.  
  30. line d1=perpendicular(pO2,line(t.BC)), d2=perpendicular(pO2,d1);
  31. point pP1=intersectionpoint(d1,segment(pA,pC)), pP2=intersectionpoint(d1,segment(pF,pG)),
  32. pP3=intersectionpoint(d2,segment(pC,pF)), pP4=intersectionpoint(d2,segment(pA,pG));
  33.  
  34. // Pièces du puzzle
  35. path piece1=carre1,
  36. piece2=pA--pP1--pO2--pP4--cycle, piece3=pC--pP3--pO2--pP1--cycle,
  37. piece4=pF--pP2--pO2--pP3--cycle, piece5=pG--pP4--pO2--pP2--cycle;
  38.  
  39. // Puzzle assemblé
  40. path puzzle1=shift(pO3-pO1)*piece1,
  41. puzzle2=shift(pC-pO2)*piece2, puzzle3=shift(pB-pO2)*piece3,
  42. puzzle4=shift((rotate(-90,pB)*pC)-pO2)*piece4, puzzle5=shift(rotate(90,pC)*pB-pO2)*piece5;
  43.  
  44. // // Version couleurs
  45. // filldraw(piece1,lightgray);
  46. // filldraw(piece2,lightred);
  47. // filldraw(piece3,lightgreen);
  48. // filldraw(piece4,lightyellow);
  49. // filldraw(piece5,lightblue);
  50.  
  51. // filldraw(puzzle1,lightgray);
  52. // filldraw(puzzle2,lightred);
  53. // filldraw(puzzle3,lightgreen);
  54. // filldraw(puzzle4,lightyellow);
  55. // filldraw(puzzle5,lightblue);
  56.  
  57. // Version noir et blanc
  58. add("hachures1",hatch(H=1.5mm,dir=S,gray));
  59. add("hachures2",hatch(H=2.5mm,dir=E,gray));
  60. add("hachures3",hatch(H=1.5mm,dir=pC-pA,gray));
  61. add("hachures4",hatch(H=2.5mm,dir=pB-pA,gray));
  62. filldraw(piece1,lightgray);
  63. filldraw(piece2,pattern("hachures1"));
  64. filldraw(piece3,pattern("hachures2"));
  65. filldraw(piece4,pattern("hachures3"));
  66. filldraw(piece5,pattern("hachures4"));
  67.  
  68. filldraw(puzzle1,lightgray);
  69. filldraw(puzzle2,pattern("hachures1"));
  70. filldraw(puzzle3,pattern("hachures2"));
  71. filldraw(puzzle4,pattern("hachures3"));
  72. filldraw(puzzle5,pattern("hachures4"));
  73.  
  74. draw(t);
  75. perpendicularmark(t.AB,t.AC);

Re: Puzzle de Pythagore

Posté : dim. 30 sept. 2012, 15:33
par GM
Merci pour cette participation. :-)

Je me suis permis de :
  • supprimer une ligne : un write(...); qui a dû t'être utile lors de la réalisation mais qui ne l'est plus ;
  • changer le

    Code : Tout sélectionner

    [code]script asymptote[/code]
    en

    Code : Tout sélectionner

    [asy]script asymptote[/asy]
    pour
    • obtenir la figure sur le forum,
    • avoir le code coloré ;
  • modifier la valeur de unit pour limiter la taille sur le forum.

Re: Puzzle de Pythagore

Posté : dim. 30 sept. 2012, 17:03
par mumblee
GM a écrit :Merci pour cette participation.

De rien, vraiment. J'apprécie toujours autant ta galerie d'exemples !

GM a écrit :Je me suis permis de [...]

Tu as évidemment bien fait. Merci à toi.

a+