Puzzle de Pythagore

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

Puzzle de Pythagore

Message non lu par mumblee » dim. 30 sept. 2012, 11:55

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);
Fabrice Eudes
Debian Bullseye 11.4, Asymptote 2.79, texlive 2022, Emacs 27.1

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

Re: Puzzle de Pythagore

Message non lu par GM » dim. 30 sept. 2012, 15:33

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.
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 !

mumblee
Messages : 47
Enregistré le : jeu. 11 mars 2010, 10:29
Localisation : Lille

Re: Puzzle de Pythagore

Message non lu par mumblee » dim. 30 sept. 2012, 17:03

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+
Fabrice Eudes
Debian Bullseye 11.4, Asymptote 2.79, texlive 2022, Emacs 27.1

Répondre