Suite à une demande de Nicolas Roux, j'ai crée cette macro permettant d'obtenir des patates en forme de patates :) et différentes les unes des autres. Elles sont dessinées à partir d'un losange de centre cent
et de diagonales de longueur Di
et di
.
Nicolas a ensuite utilisé cette macro pour produire la figure ci-dessous.
patates.mp [ source brut ]
%@Auteur:Nicolas Roux (Macro patate: Christophe) %@Date:07/06/2007 input geometriesyr16; vardef patate(expr cen,Di,di)= save $; picture $; pair po[]; po1=cen shifted(u*(0,di/2)); po2=cen shifted(u*(-Di/2,0)); po3=symetrie(po1,cen); po4-po3=po1-po2; numeric dev; dev=-10+uniformdeviate(20); $=image( trace po1{dir(-180+dev)}..po2{dir(-90+dev)}..po3{dir(0+dev)}..{dir(90+dev)}po4..cycle; ); $ enddef;
figure(0,0,20u,15u); u:=0.7cm; pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,P; A=u*(0,0); B-A=u*(1.5,1); C=rotation(A,B,-90); D-C=A-B; picture carre,rectangle,losange,plg; carre=image( trace polygone(A,B,C,D); trace Codelongueur(A,B,B,C,C,D,D,A,2); trace codeperp(A,B,C,5); trace codeperp(B,C,D,5); trace codeperp(C,D,A,5); trace codeperp(D,A,B,5); ); E=u*(0,0); F-E=u*(2,0); G=rotation(E,F,-90); H-E=u*(3,0); I-H=G-F; J-E=G-F; rectangle=image( trace polygone(E,H,I,J); trace Codelongueur(E,H,J,I,4); trace Codelongueur(E,J,H,I,1); trace codeperp(E,H,I,5); trace codeperp(H,I,J,5); trace codeperp(I,J,E,5); trace codeperp(J,E,H,5); ); K-A=u*(1,2); L-A=u*(1,-2); M-A=u*(2,0); losange=image( trace polygone(A,K,M,L); trace Codelongueur(A,K,K,M,M,L,L,A,3); ); N=rotation(A,B,120)*1.5; P-N=A-B; plg=image( trace polygone(A,B,N,P); trace Codelongueur(A,B,N,P,5); trace Codelongueur(B,N,A,P,1); ); trace patate(u*(10,7.5),18,13); trace carre shifted(u*(10,8.5)); trace rectangle shifted(u*(13.5,6)); trace losange shifted(u*(4,8.5)); trace plg shifted(u*(8,2)); trace patate(u*(8,7.5),10,9); trace patate(u*(12,7.5),10,9); trace u*(0,0)--u*(20,0)--u*(20,15)--u*(0,15)--u*(0,0); trace appelation((7u,13u),(13u,13u),2mm,btex Parall\'elogrammes etex); trace appelation((12u,10u),(15u,10u),2mm,btex Rectangles etex); trace appelation((5u,5u),(7u,5u),2mm,btex Losanges etex); trace appelation((10u,5u),(11u,5u),2mm,btex Carr\'es etex); trace appelation((8u,0.2u),(12u,0.2u),2mm,btex Quadrilat\`eres etex); fin; end