prologues:=2; input geometriesyr16; input TEX; vardef DessineObjetColoreUlam(expr col)= OrdrepourColore; for l=1 upto NF: color cc,dd; dd=Vision(Gc[l*100+1]); cc=Normal(Sommet[Gc[l*100+1]],Sommet[Gc[l*100+2]],Sommet[Gc[l*100+3]]); if (ProduitScalaire(dd,cc)<0): if pointilles="oui": drawoptions(dashed dashpattern(on3bp off9bp)); trace for k=1 upto Gc[100*l]: Projette(Sommet[Gc[100*l+k]])-- endfor cycle; fi; else: fill for k=1 upto Gc[100*l]: Projette(Sommet[Gc[100*l+k]])-- endfor cycle withcolor (ProduitScalaire(dd,cc)/(Module(dd)*Module(cc)))*2*col;%Co[l mod 7]; trace for k=1 upto Gc[100*l]: Projette(Sommet[Gc[100*l+k]])-- endfor cycle withpen pencircle scaled0.5bp withcolor gris; fi; drawoptions(); endfor; enddef; vardef Icosaedreulam(expr cent)= picture ico; ico=image( %%Sommets NbS:=12; Sommet1:=cent+0.08*(0.8944271,0,0.4472137); Sommet2:=cent+0.08*(0.2763932,0.8506507,0.4472137); Sommet3:=cent+0.08*(-0.7236067,0.5257311,0.4472137); Sommet4:=cent+0.08*(-0.7236067,-0.5257311,0.4472137); Sommet5:=cent+0.08*(0.2763932,-0.8506507,0.4472137); Sommet6:=cent+0.08*(0,0,1); Sommet7:=cent+0.08*(0,0,-1); Sommet8:=cent+0.08*(-0.8944271,0,-0.4472137); Sommet9:=cent+0.08*(-0.2763932,-0.8506507,-0.4472137); Sommet10:=cent+0.08*(0.7236067,-0.5257311,-0.4472137); Sommet11:=cent+0.08*(0.7236067,0.5257311,-0.4472137); Sommet12:=cent+0.08*(-0.2763932,0.8506507,-0.4472137); %%Faces NF:=20; Fc[100]:=3;Fc[101]:=1;Fc[102]:=2;Fc[103]:=6; Fc[200]:=3;Fc[201]:=2;Fc[202]:=3;Fc[203]:=6; Fc[300]:=3;Fc[301]:=3;Fc[302]:=4;Fc[303]:=6; Fc[400]:=3;Fc[401]:=4;Fc[402]:=5;Fc[403]:=6; Fc[500]:=3;Fc[501]:=5;Fc[502]:=1;Fc[503]:=6; Fc[600]:=3;Fc[601]:=10;Fc[602]:=1;Fc[603]:=5; Fc[700]:=3;Fc[701]:=1;Fc[702]:=10;Fc[703]:=11; Fc[800]:=3;Fc[801]:=11;Fc[802]:=2;Fc[803]:=1; Fc[900]:=3;Fc[901]:=2;Fc[902]:=11;Fc[903]:=12; Fc[1000]:=3;Fc[1001]:=12;Fc[1002]:=3;Fc[1003]:=2; Fc[1100]:=3;Fc[1101]:=3;Fc[1102]:=12;Fc[1103]:=8; Fc[1200]:=3;Fc[1201]:=3;Fc[1202]:=8;Fc[1203]:=4; Fc[1300]:=3;Fc[1301]:=4;Fc[1302]:=8;Fc[1303]:=9; Fc[1400]:=3;Fc[1401]:=4;Fc[1402]:=9;Fc[1403]:=5; Fc[1500]:=3;Fc[1501]:=5;Fc[1502]:=9;Fc[1503]:=10; Fc[1600]:=3;Fc[1601]:=7;Fc[1602]:=8;Fc[1603]:=12; Fc[1700]:=3;Fc[1701]:=7;Fc[1702]:=9;Fc[1703]:=8; Fc[1800]:=3;Fc[1801]:=7;Fc[1802]:=10;Fc[1803]:=9; Fc[1900]:=3;Fc[1901]:=7;Fc[1902]:=11;Fc[1903]:=10; Fc[2000]:=3;Fc[2001]:=7;Fc[2002]:=12;Fc[2003]:=11; DessineObjetColoreUlam(vert); ); ico enddef; vardef Cubeulam(expr cent)= picture cub; cub=image( NbS:=8; Sommet1:=cent+(-0.18/4,-0.18/4,-0.18/4)+(0.18/2,0,0); Sommet2:=cent+(-0.18/4,-0.18/4,-0.18/4)+(0.18/2,0.18/2,0); Sommet3:=cent+(-0.18/4,-0.18/4,-0.18/4)+(0,0.18/2,0); Sommet4:=cent+(-0.18/4,-0.18/4,-0.18/4)+(0,0,0); Sommet5:=cent+(-0.18/4,-0.18/4,-0.18/4)+(0,0,0.18/2); Sommet6:=cent+(-0.18/4,-0.18/4,-0.18/4)+(0.18/2,0,0.18/2); Sommet7:=cent+(-0.18/4,-0.18/4,-0.18/4)+(0.18/2,0.18/2,0.18/2); Sommet8:=cent+(-0.18/4,-0.18/4,-0.18/4)+(0,0.18/2,0.18/2); %%Faces NF:=6; Fc[100]:=4;Fc[101]:=1;Fc[102]:=4;Fc[103]:=3;Fc[104]:=2; Fc[200]:=4;Fc[201]:=4;Fc[202]:=5;Fc[203]:=8;Fc[204]:=3; Fc[300]:=4;Fc[301]:=1;Fc[302]:=6;Fc[303]:=5;Fc[304]:=4; Fc[400]:=4;Fc[401]:=5;Fc[402]:=6;Fc[403]:=7;Fc[404]:=8; Fc[500]:=4;Fc[501]:=2;Fc[502]:=3;Fc[503]:=8;Fc[504]:=7; Fc[600]:=4;Fc[601]:=1;Fc[602]:=2;Fc[603]:=7;Fc[604]:=6; DessineObjetColoreUlam(jaune); ); cub enddef; vardef pgcd(expr A,B) = save a,b,r; numeric a,b,r; a := A; b := B; forever: r := a mod b; a := b; b := r; exitunless r > 0; endfor; a enddef; vardef prem(expr P)= boolean reponse; reponse=false; numeric Div,DIV;%DIV pour compter le nombre de diviseurs Div=0;DIV=0; if P=1: Div:=1; else: for g=2 upto P-1: if (pgcd(P,g)<>1): Div:=Div+1; if (P mod g)=0: DIV:=DIV+1; fi; fi; endfor; fi; if Div=0: reponse:=true; fi; reponse enddef; vardef ulam(expr nb,nbdiag,arret)= save spiulam; picture spiulam; spiulam=image( if prem(nb)=true: trace Cubeulam((0,0,0)); label(TEX(""&decimal(nb)&""),Projette((0,0,0))); else: trace Icosaedreulam((0,0,0)); label(TEX(""&decimal(nb)&""),Projette((0,0,0))) withcolor 0.9green; fi; color ptd; ptd=(0,0,0); coef:=0.35; k:=nb; for l=1 upto (nbdiag*2+1): if (l mod 2)=1: for j=1 upto l: if ((k+1)<(nb+arret)): k:=k+1; if prem(k)=true: trace Cubeulam(ptd+coef*(0,j,0)); label(TEX(""&decimal(k)&""),Projette(ptd+coef*(0,j,0))); else: trace Icosaedreulam(ptd+coef*(0,j,0)); label(TEX(""&decimal(k)&"$_{"&decimal(DIV)&"}$"),Projette(ptd+coef*(0,j,0))); fi; fi; endfor; ptd:=ptd+coef*(0,l,0); for j=1 upto l: if ((k+1)<(nb+arret)): k:=k+1; if prem(k)=true: trace Cubeulam(ptd+coef*(j,0,0)); label(TEX(""&decimal(k)&""),Projette(ptd+coef*(j,0,0))); else: trace Icosaedreulam(ptd+coef*(j,0,0)); label(TEX(""&decimal(k)&"$_{"&decimal(DIV)&"}$"),Projette(ptd+coef*(j,0,0))); fi; fi; endfor; ptd:=ptd+coef*(l,0,0); fi; if (l mod 2)=0: for j=1 upto l: if((k+1)<(nb+arret)): k:=k+1; if prem(k)=true: trace Cubeulam(ptd+coef*(0,-j,0)); label(TEX(""&decimal(k)&""),Projette(ptd+coef*(0,-j,0))); else: trace Icosaedreulam(ptd+coef*(0,-j,0)); label(TEX(""&decimal(k)&"$_{"&decimal(DIV)&"}$"),Projette(ptd+coef*(0,-j,0))); fi; fi; endfor; ptd:=ptd+coef*(0,-l,0); for j=1 upto l: if((k+1)<(nb+arret)): k:=k+1; if prem(k)=true: trace Cubeulam(ptd+coef*(-j,0,0)); label(TEX(""&decimal(k)&""),Projette(ptd+coef*(-j,0,0))); else: trace Icosaedreulam(ptd+coef*(-j,0,0)); label(TEX(""&decimal(k)&"$_{"&decimal(DIV)&"}$"),Projette(ptd+coef*(-j,0,0))); fi; fi; endfor; ptd:=ptd+coef*(-l,0,0); fi; endfor; ); spiulam enddef; for p=1 upto 49: figureespace(-7.5u,-5u,6.5u,5u); trace feuillet withcolor blanc; Initialisation(5,30,20,650); pointilles:="non"; drawoptions(withcolor orange); for t=-3 upto 3: trace segment((t*0.35,-3*0.35,0),(t*0.35,3*0.35,0)); trace segment((-3*0.35,t*0.35,0),(3*0.35,t*0.35,0)); endfor; drawoptions(); trace ulam(41,4,p); finespace; endfor; end