From 00abda4c22e1a32ae68e103e9bf15497afac9983 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Sat, 24 Apr 2021 03:01:03 +0000 Subject: CTAN sync 202104240301 --- .../contrib/profcollege/metapost/PfCGeometrie.mp | 1206 ++++++++++++++++++++ 1 file changed, 1206 insertions(+) create mode 100644 macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp (limited to 'macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp') diff --git a/macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp b/macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp new file mode 100644 index 0000000000..222df57419 --- /dev/null +++ b/macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp @@ -0,0 +1,1206 @@ +%=============================================== +%% PfC-Geometrie +%% christophe.poulain@melusine.eu.org +%%=============================================== +%------------------------------------------------ +% Appel fichier +%------------------------------------------------ +%input PfC-Constantes; +%------------------------------------------------ +% La figure (debut et fin) JMS/CP +%------------------------------------------------ +path feuillet; +numeric _tfig,_nfig; +_tfig:=5cm; +_nfig:=0; +pair coinbg,coinbd,coinhd,coinhg; + +string typetrace; +typetrace="normal"; + +def feuille(expr xa,ya,xb,yb) = + feuillet := (xa,ya)--(xa,yb)--(xb,yb)--(xb,ya)--cycle; + coinbg := (xa,ya); + coinbd := (xb,ya); + coinhd := (xb,yb); + coinhg := (xa,yb); + %modifie le 29.09.04 + z.so=(xpart(coinbg/1cm),ypart(coinbg/1cm)); + z.ne=(xpart(coinhd/1cm),ypart(coinhd/1cm)); + %fin modification + extra_endfig := "clip currentpicture to feuillet;" & extra_endfig; +enddef; + +def Figure(expr xa,ya,xb,yb) = + feuille(xa,ya,xb,yb); + _tfig:= if (xb-xa)>(yb-ya): xb-xa else: yb-ya fi; + _tfig:=2*_tfig; +enddef; + +%%----------------------------------------------- +%% Les marques (JMS) +%%----------------------------------------------- +string marque_p; +marque_p := "non"; +marque_r := 20; +marque_a := 20; +marque_s := 5; +marque_ang := 10; +m_c := 10 ;%Pour la croix du marquage des points + +%------------------------------------------------ +% Les tables +%------------------------------------------------ +numeric _tn; +_tn:=0; +pair _t[]; +color _T[]; + +%%----------------------------------------------- +%% Procedures d'affichage +%%----------------------------------------------- +def MarquePoint(expr p)= + if typetrace="3D": + %JMS + if marque_p = "plein": + fill fullcircle scaled (marque_r/5) shifted Projette(p); + elseif marque_p = "creux": + fill fullcircle scaled (marque_r/5) shifted (Projette(p)) withcolor white; + draw fullcircle scaled (marque_r/5) shifted (Projette(p)); + %fin JMS + elseif marque_p = "croix": + draw (Projette(p) shifted (-u/10,u/10))--(Projette(p) shifted (u/10,-u/10)); + draw (Projette(p) shifted (-u/10,-u/10))--(Projette(p) shifted (u/10,u/10)); + elseif marque_p = "tiretv": + draw (Projette(p) shifted (0,u/10))--(Projette(p) shifted(0,-u/10)); + elseif marque_p = "tireth": + draw (Projette(p) shifted (u/10,0))--(Projette(p) shifted(-u/10,0)); + fi; + else: + if marque_p = "plein": + fill fullcircle scaled (marque_r/5) shifted p; + elseif marque_p = "creux": + fill fullcircle scaled (marque_r/5) shifted p withcolor white; + draw fullcircle scaled (marque_r/5) shifted p; + elseif marque_p = "croix": + draw (p shifted (-u/m_c,u/m_c))--(p shifted (u/m_c,-u/m_c)); + draw (p shifted (-u/m_c,-u/m_c))--(p shifted (u/m_c,u/m_c)); + elseif marque_p = "tiretv": + draw (p shifted (0,u/10))--(p shifted(0,-u/10)); + elseif marque_p = "tireth": + draw (p shifted (u/10,0))--(p shifted(-u/10,0)); + fi; + fi; +enddef; + +vardef pointe(text t) = + for p_ = t: if (pair p_) or (color p_): MarquePoint(p_); fi endfor; +enddef; + +%------------------------------------------------ +% Points +%------------------------------------------------ +%JMS +vardef iso(text t) = + save s,n; numeric n; + if typetrace="3D": + color s; s := (0,0,0) ; n := 0; + for p_ = t: s := s + p_; n := n + 1 ; endfor; + else: + pair s; s := (0,0) ; n := 0; + for p_ = t: s := s + p_; n := n + 1 ; endfor; + fi; + if n>0: (1/n)*s fi +enddef; + +vardef milieu(expr AA,BB)= + save $; + pair $; + if typetrace="mainlevee": + $=point((length segment(AA,BB))*(1/2+(-1+uniformdeviate(2))/10)) of segment(AA,BB) + else: + $=iso(AA,BB) + fi; + $ +enddef; + +vardef CentreCercleI(expr aa,bb,cc)= + save $,a,c; + pair $; + numeric a,c; + a=(angle(aa-cc)-angle(bb-cc))/2; + c=(angle(cc-bb)-angle(aa-bb))/2; + ($-cc) rotated a shifted cc=whatever[aa,cc]; + ($-bb) rotated c shifted bb=whatever[bb,cc]; + $ +enddef; + +%------------------------------------------------ +% Cercles +%------------------------------------------------ +%Cercle connaissant le centre A et le rayon q +vardef cercle(expr aa, q)=fullcircle scaled (2*q) shifted aa +enddef; +%Cercle de centre A et passant par B +vardef cerclepoint(expr aa,bb)=fullcircle scaled (2*abs(aa-bb)) shifted aa +enddef; +%Cercle connaissant le diametre [AB] +vardef cercledia(expr aa,bb)=cercles(iso(aa,bb),bb) + %fullcircle scaled (2*abs(1/2[aa,bb]-bb)) shifted (1/2[aa,bb]) +enddef; +%Cercles complets +vardef cercles(text t)= + save Cer; + save n; + n:=0; + for p_=t: + if pair p_: + n:=n+1; + _t[n]:=p_; + fi + if numeric p_: + rayon:=p_; + fi; + if color p_: + n:=n+1; + _T[n]:=p_; + fi; + endfor; + if typetrace="3D":%centre aa passant par bb dans le plan (ccddee) généralement aa=cc + path Cer; + color ptcer[]; + for k=0 step 5 until 360 : + ptcer[k div 5]-_T[1]=Distance(_T[1],_T[2])*((_T[4]-_T[3])*cosd(k)/Distance(_T[3],_T[4])+(_T[5]-_T[3])*sind(k)/Distance(_T[3],_T[5])); + endfor; + Cer=Projette(ptcer0) + for k=0 step 5 until 360 : + ..Projette(ptcer[k div 5]) + endfor + ..cycle; + else: + path Cer; + if n=1 : Cer=fullcircle scaled (2*rayon) shifted _t[1]; + elseif n=2 : Cer=fullcircle scaled (2*abs(_t[1]-_t[2])) shifted _t[1]; + elseif n=3 : Cer=cercles(CentreCercleC(_t[1],_t[2],_t[3]),_t[1]); + fi + fi + Cer +enddef; + +%Point particulier sur le cercle +vardef pointarc(expr cercla,angle)= + point(arctime((angle/360)*arclength cercla) of cercla) of cercla +enddef; + +%Arc de cercle AB de centre 0(dans le sens direct) : les points A et B doivent etre sur le cercle. +vardef arccercle(expr aa,bb,oo)= + path tempo; + path arc; + tempo=fullcircle scaled (2*abs(aa-oo)) shifted oo; + if (angle(aa-oo)=0) or (angle(aa-oo)>0) : + if (angle(bb-oo)=0) or (angle(bb-oo)>0): + if (angle(aa-oo)0): + arc=subpath(length tempo+angle(aa-oo)*(length tempo)/360,length tempo+angle(bb-oo)*(length tempo)/360) of tempo; + elseif (angle(bb-oo)<0): + if (angle(aa-oo)=angle(bb-oo)) or (angle(aa-oo)(-1,-1): + draw support shifted (ecart*j*(u,0)); + fi + endfor; + ); + clip $ to chemin; + drawoptions(); + $ +enddef; +%fleche pour coter un segment [AB] (Jacques Marot) +vardef cotation(expr aa,bb,ecart,decalage,cote)= + pair m[] ; + save $; + picture $; + m3=unitvector(bb-aa) rotated 90; + m1=aa+ecart*m3; + m2=bb+ecart*m3; + $=image( + pickup pencircle scaled 0.2bp; + drawdblarrow m1--m2 ; + draw aa--m1 dashed evenly; + draw bb--m2 dashed evenly; + label(cote rotated angle(m2-m1),(m1+m2)/2+decalage*m3); + ); + $ +enddef; + +vardef appelation(expr aa,bb,decalage,cote)= + save $; + pair m[],AA,BB; + if color aa: + AA=Projette(aa); + else: + AA=aa; + fi; + if color bb: + BB=Projette(bb); + else: + BB=bb; + fi; + m3=unitvector(BB-AA) rotated 90; + picture $; + $=image( + label(cote rotated angle(BB-AA),(BB+AA)/2+decalage*m3); + ); + $ +enddef; + +vardef cotationmil(expr aa,bb,ecart,decalage,cote)= %Christophe + pair m[],AA,BB; + save $; + picture cot; + if color aa: + AA=Projette(aa) + else: + AA=aa + fi; + if color bb: + BB=Projette(bb) + else: + BB=bb + fi; + m3=unitvector(BB-AA) rotated 90; + m1=AA+ecart*m3; + m2=BB+ecart*m3; + cot=image( + pickup pencircle scaled 0.2bp; + drawarrow (1/2[m1,m2]+decalage*unitvector(m1-m2))--m1; + drawarrow (1/2[m1,m2]-decalage*unitvector(m1-m2))--m2; + draw AA--m1 dashed evenly; + draw BB--m2 dashed evenly; + label(cote rotated angle(m2-m1),(m1+m2)/2); + ); + cot +enddef; + +%%%%%%%%%% +%francisation +%%%%%%%%% +def trace expr o = + if path o: draw o else: draw o fi +enddef; +def remplis expr o = + if path o: fill o else: fill o fi +enddef; + +%3D - basé sur donymodule +color Sommet[]; + +color Co[]; +Co0=jaune; +Co1=violet; +Co2=orange; +Co3=ciel; +Co4=vert; +Co5=bleu; +Co6=rouge; + +string pointilles; + +string typerepre; +typerepre:="proj"; + +%generalite +vardef Projette(expr X)= + pair $; + Xobs := -redpart(X)*Aux1 + greenpart(X)*Aux3; + Yobs := -redpart(X)*Aux5 - greenpart(X)*Aux6 + bluepart(X)*Aux4; + if typerepre="proj": + Zobs := -redpart(X)*Aux7 - greenpart(X)*Aux8 - bluepart(X)*Aux2 + Rho; + XProj := DE*Xobs/Zobs; + YProj := DE*Yobs/Zobs; + elseif typerepre="persp": + XProj := DE*Xobs; + YProj := DE*Yobs; + fi; + $=(XProj,YProj); + $ +enddef; + +vardef Initialisation(expr r,t,p,d)= + Rho:=r; + Theta:=t; + Phi:=p; + DE:=d; + Aux1:=sind(Theta); + Aux2:=sind(Phi); + Aux3:=cosd(Theta); + Aux4:=cosd(Phi); + Aux5:=Aux3*Aux2; + Aux6:=Aux1*Aux2; + Aux7:=Aux3*Aux4; + Aux8:=Aux1*Aux4; + pointilles:="oui"; +enddef; + +%vues cachees + +vardef Face(text t)= + j:=0; + for p_=t : + if numeric p_: + a[j]:=p_; + j:=j+1; + fi; + endfor; + for k=1 upto (j-1): + Fc[a0*100+(k-1)]:=a[k]; + endfor; +enddef; + +vardef Oeil=(Rho*Aux7,Rho*Aux8,Rho*Aux2) +enddef; + +vardef Vision(expr num)= + save bb; + color bb; + bb=(redpart(Oeil-Sommet[num]),greenpart(Oeil-Sommet[num]),bluepart(Oeil-Sommet[num])); + bb +enddef; + +vardef Normal(expr vecun,vecde,vectr)= + save aa; + color aa; + P1:=redpart(vecde-vecun); + P2:=greenpart(vecde-vecun); + P3:=bluepart(vecde-vecun); + Q1:=redpart(vectr-vecun); + Q2:=greenpart(vectr-vecun); + Q3:=bluepart(vectr-vecun); + aa=(P2*Q3-Q2*P3,P3*Q1-Q3*P1,P1*Q2-Q1*P2); + aa +enddef; + +vardef ProduitScalaire(expr wec,mor)= + redpart(wec)*redpart(mor)+greenpart(wec)*greenpart(mor)+bluepart(wec)*bluepart(mor) +enddef; + +vardef Distance(expr aa,bb)=%Entre deux points + sqrt((redpart(bb)-redpart(aa))*(redpart(bb)-redpart(aa))+(greenpart(bb)-greenpart(aa))*(greenpart(bb)-greenpart(aa))+(bluepart(bb)-bluepart(aa))*(bluepart(bb)-bluepart(aa))) +enddef; + +vardef Module(expr aa)=%module d'un vecteur +sqrt((redpart(aa))**2+(greenpart(aa))**2+(bluepart(aa)**2)) +enddef; + +color CoulTrace; +CoulTrace=black; + +vardef DessineObjet= + for l=1 upto NF: + color cc,dd; + dd=Vision(Fc[l*100+1]); + cc=Normal(Sommet[Fc[l*100+1]],Sommet[Fc[l*100+2]],Sommet[Fc[l*100+3]]); + if (ProduitScalaire(dd,cc)<0): + if pointilles="oui": + drawoptions(dashed dashpattern(on3pt off6pt) withcolor CoulTrace); + trace for k=1 upto Fc[100*l]: + Projette(Sommet[Fc[100*l+k]])-- + endfor + cycle; + fi; + else: + trace for k=1 upto Fc[100*l]: + Projette(Sommet[Fc[100*l+k]])-- + endfor + cycle withcolor CoulTrace; + fi; + drawoptions(); + endfor; +enddef; + +%%Transformations + +%Translations + +vardef TranslateSommets(expr v)= + for k=1 upto NbS: + Sommet[k]:=Sommet[k]+v; + endfor; +enddef; + +vardef SymetriePlanZ(expr vv)= + for k=1 upto NbS: + w:=vv-bluepart(Sommet[k]); + Sommet[k]:=(redpart(Sommet[k]),greenpart(Sommet[k]),w); + endfor; +enddef; + +vardef IntersectionDroite(expr aa,bb,cc,dd)= + save tt; + color tt; + tt=whatever[aa,bb]; + tt=whatever[cc,dd]; + tt +enddef; + +%%denis Roegel---------- +vardef Intersectionplandroite(expr aa,bb,cc,dd,ee)= + save int; + boolean int; + color gg,caaa[]; + caaa3=Normal(aa,bb,cc)/Module(Normal(aa,bb,cc)); + caaa1=aa-dd; + caaa2=ee-dd; + if ProduitScalaire(caaa2,caaa3)<>0: + caaa4=caaa2*(ProduitScalaire(caaa1,caaa3)/ProduitScalaire(caaa2,caaa3)); + int:=true; + else: % the line is parallel to the plane + int:=false; + fi; + int +enddef; + +vardef IntersectionPlanDroite(expr aa,bb,cc,dd,ee)=%plan (aa,bb,cc) droite(dd,ee) + if Intersectionplandroite(aa,bb,cc,dd,ee): + gg=dd+caaa4; + fi; + gg +enddef; + +vardef ProjectionsurPlan(expr aa,bb,cc,dd)=%Projection du point aa sur le plan (bbccdd) + save di,vc; + color va,vb,vc; + va=Normal(bb,cc,dd)/Module(Normal(bb,cc,dd)); + vb=aa-bb; + di=-ProduitScalaire(vb,va); + va:=di*va; + vb:=vb+va; + vc=bb+vb; + vc +enddef; + +vardef Intersectionplanplan(expr AA,BB,CC,DD,EE,FF)=%besoin pour la suite + color trial[]; + path INTer; + if Intersectionplandroite(DD,EE,FF,AA,BB): + trial1=IntersectionPlanDroite(DD,EE,FF,AA,BB); + else:% there is no intersection or the intersection is the line + trial1=IntersectionPlanDroite(DD,EE,FF,AA,1/2[BB,CC]); + fi; + if Intersectionplandroite(DD,EE,FF,AA,CC): + trial2=IntersectionPlanDroite(DD,EE,FF,AA,CC); + else:% there is no intersection or the intersection is the line + trial2=IntersectionPlanDroite(DD,EE,FF,CC,1/2[BB,AA]);%modif de cp + fi; + %INTer=segment(10[trial1,trial2],10[trial2,trial1]); + INTer=droite(trial1,trial2); + INTer +enddef; + +vardef IntersectionPlanPlan(expr aa,bb,cc,dd,ee,ff)= + %a verifier + save da,db,dc,int,INTER; + boolean int; + path INTER; + da=Module(aa-ProjectionsurPlan(aa,dd,ee,ff)); + %show da; + db=Module(bb-ProjectionsurPlan(bb,dd,ee,ff)); + %show db; + dc=Module(cc-ProjectionsurPlan(cc,dd,ee,ff)); + %show dc; + if (da=db) and (db=dc): % the two planes are parallel + int:=false; + else: + int:=true; + if (da=db): + INTER=droite(aa,bb); + elseif (db=dc): + INTER=droite(bb,cc); + elseif (dc=da): + INTER=droite(cc,aa); + elseif (da>=db) and (da>=dc): + INTER=Intersectionplanplan(aa,bb,cc,dd,ee,ff); + elseif (db>=da) and (db>=dc): + INTER=Intersectionplanplan(bb,cc,aa,dd,ee,ff); + elseif (dc>=da) and (dc>=db): + INTER=Intersectionplanplan(cc,aa,bb,dd,ee,ff); + fi; + fi; + INTER +enddef; +%%--------------------- + +%Cube +numeric arete; +arete=1; + +vardef Cube(text t)= + picture cub; + cub=image( + NbS:=8; + Sommet1:=(arete,0,0); + Sommet2:=(arete,arete,0); + Sommet3:=(0,arete,0); + Sommet4:=(0,0,0); + Sommet5:=(0,0,arete); + Sommet6:=(arete,0,arete); + Sommet7:=(arete,arete,arete); + Sommet8:=(0,arete,arete); +%%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; + DessineObjet; + k:=1; + for p_=t: + if color p_: + p_=Sommet[k]; + k:=k+1; + fi + endfor; + ); +cub +enddef; + +vardef cube= + typetrace:="3D"; + typerepre:="persp"; + Initialisation(1500,30,20,100); + picture cub; + cub=image( + NbS:=8; + Sommet1:=(arete,0,0); + Sommet2:=(arete,arete,0); + Sommet3:=(0,arete,0); + Sommet4:=(0,0,0); + Sommet5:=(0,0,arete); + Sommet6:=(arete,0,arete); + Sommet7:=(arete,arete,arete); + Sommet8:=(0,arete,arete); +%%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; + DessineObjet; + ); + cub +enddef; + +%Cube +vardef Paveh(text t)= + picture paveh; + paveh=image( + NbS:=8; + Sommet1:=(0.75,0,0); + Sommet2:=(0.75,1.5,0); + Sommet3:=(0,1.5,0); + Sommet4:=(0,0,0); + Sommet5:=(0,0,1); + Sommet6:=(0.75,0,1); + Sommet7:=(0.75,1.5,1); + Sommet8:=(0,1.5,1); +%%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; + DessineObjet; + k:=1; + for p_=t: + if color p_: + p_=Sommet[k]; + k:=k+1; + fi + endfor; + ); +paveh +enddef; + +%Cube +vardef Pavev(text t)= + picture pavev; + pavev=image( + NbS:=8; + Sommet1:=(1,0,0); + Sommet2:=(1,0.75,0); + Sommet3:=(0,0.75,0); + Sommet4:=(0,0,0); + Sommet5:=(0,0,1.5); + Sommet6:=(1,0,1.5); + Sommet7:=(1,0.75,1.5); + Sommet8:=(0,0.75,1.5); +%%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; + DessineObjet; + k:=1; + for p_=t: + if color p_: + p_=Sommet[k]; + k:=k+1; + fi + endfor; + ); +pavev +enddef; + +vardef Pave(text t)(expr aa,bb,cc)= + picture pave; + pave=image( + NbS:=8; + Sommet1:=(aa,0,0); + Sommet2:=(aa,bb,0); + Sommet3:=(0,bb,0); + Sommet4:=(0,0,0); + Sommet5:=(0,0,cc); + Sommet6:=(aa,0,cc); + Sommet7:=(aa,bb,cc); + Sommet8:=(0,bb,cc); +%%Faces + NF:=6; + Fc[100]:=4;Fc[101]:=4;Fc[102]:=3;Fc[103]:=2;Fc[104]:=1; + Fc[200]:=4;Fc[201]:=4;Fc[202]:=5;Fc[203]:=8;Fc[204]:=3; + Fc[300]:=4;Fc[301]:=4;Fc[302]:=1;Fc[303]:=6;Fc[304]:=5; + 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; + DessineObjet; + k:=1; + for p_=t: + if color p_: + p_=Sommet[k]; + k:=k+1; + fi + endfor; + ); +pave +enddef; + +vardef pave(expr aa,bb,cc)= + typetrace:="3D"; + typerepre:="persp"; + Initialisation(1500,30,20,100); + picture PAVE; + PAVE=image( + NbS:=8; + Sommet1:=(aa,0,0); + Sommet2:=(aa,bb,0); + Sommet3:=(0,bb,0); + Sommet4:=(0,0,0); + Sommet5:=(0,0,cc); + Sommet6:=(aa,0,cc); + Sommet7:=(aa,bb,cc); + Sommet8:=(0,bb,cc); +%%Faces + NF:=6; + Fc[100]:=4;Fc[101]:=4;Fc[102]:=3;Fc[103]:=2;Fc[104]:=1; + Fc[200]:=4;Fc[201]:=4;Fc[202]:=5;Fc[203]:=8;Fc[204]:=3; + Fc[300]:=4;Fc[301]:=4;Fc[302]:=1;Fc[303]:=6;Fc[304]:=5; + 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; + DessineObjet; + ); + PAVE +enddef; + +vardef Tetraedrer(text t)= + picture tetrar; + tetrar=image( + %Sommets + NbS:=4; + Sommet1:=(0,0,1); + Sommet2:=(-0.4714045,-0.8164965,-1/3); + Sommet3:=(0.942809,0,-1/3); + Sommet4:=(-0.4714045,0.8164965,-1/3); + %Faces + NF:=4; + Fc[100]:=3;Fc[101]:=1;Fc[102]:=2;Fc[103]:=3; + Fc[200]:=3;Fc[201]:=1;Fc[202]:=3;Fc[203]:=4; + Fc[300]:=3;Fc[301]:=1;Fc[302]:=4;Fc[303]:=2; + Fc[400]:=3;Fc[401]:=2;Fc[402]:=4;Fc[403]:=3; + DessineObjet; + k:=1; + for p_=t: + if color p_: + p_=Sommet[k]; + k:=k+1; + fi + endfor; + ); + tetrar +enddef; + +endinput; -- cgit v1.2.3