%%Module pour la géométrie dans l'espace d'après R.DONY "Graphismes scientifiques sur ordinateur" & "Graphismes dans le plan et dans l'espace". %%TO DO %Autres solides %Appel par nom de fichier %Animations %Surfaces z=f(x,y) input geometriesyr12; input marith; %input format; init_numbers(btex $-$ etex, btex$1$etex, btex$ times 10$etex, btex$"" sup -$etex, btex$"" sup 2$etex); color Sommet[]; color C[]; C0=jaune; C1=violet; C2=orange; C3=ciel; C4=vert; C5=bleu; C6=rouge; %généralité vardef Projette(expr X)= pair $; Xobs := -redpart(X)*Aux1 + greenpart(X)*Aux3; Yobs := -redpart(X)*Aux5 - greenpart(X)*Aux6 + bluepart(X)*Aux4; Zobs := -redpart(X)*Aux7 - greenpart(X)*Aux8 - bluepart(X)*Aux2 + Rho; XProj := DE*Xobs/Zobs; YProj := DE*Yobs/Zobs; $=(XProj,YProj); $ enddef; string pointilles; 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 cachées %lecture des faces et sommets; vardef LectureSommet= color Sommet[]; %%A compléter si on souhaite inclure des nouveaux sommets enddef; vardef LectureFace= %%A compléter si on souhaite définir les faces 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 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(on3bp off9bp)); 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; fi; drawoptions(); endfor; enddef; vardef OrdrepourColore= cptvu:=1;%Compteur des faces vues cptnvu:=NF;%Compteur des faces non vues 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): Gc[100*cptnvu]:=Fc[100*l]; for k=1 upto Fc[100*l]: Gc[100*cptnvu+k]:=Fc[100*l+k]; endfor; cptnvu:=cptnvu-1; else: Gc[100*cptvu]:=Fc[100*l]; for k=1 upto Fc[100*l]: Gc[100*cptvu+k]:=Fc[100*l+k]; endfor; cptvu:=cptvu+1; fi; endfor; enddef; vardef DessineObjetColore= 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 C[l mod 7]; trace for k=1 upto Gc[100*l]: Projette(Sommet[Gc[100*l+k]])-- endfor cycle; fi; drawoptions(); endfor; enddef; vardef TraceAxes= color Origine,Unitex,Unitey,Unitez; Origine=(0,0,0); Unitex=(3,0,0); Unitey=(0,3,0); Unitez=(0,0,3); drawoptions(dashed dashpattern(on 12bp off 6bp on 3bp off 6bp)); drawarrow Projette(Origine)--Projette(Unitex); drawarrow Projette(Origine)--Projette(Unitey); drawarrow Projette(Origine)--Projette(Unitez); drawoptions(); enddef; vardef TraceGrille= drawoptions(dashed evenly withcolor gris); color ppt[]; for k=0 upto 5: ppt[k]:=(k,0,0); trace Projette(ppt[k]+(0,0,5))--Projette(ppt[k])--Projette(ppt[k]+(0,5,0)); ppt[k]:=(0,k,0); trace Projette(ppt[k]+(5,0,0))--Projette(ppt[k])--Projette(ppt[k]+(0,0,5)); ppt[k]:=(0,0,k); trace Projette(ppt[k]+(5,0,0))--Projette(ppt[k])--Projette(ppt[k]+(0,5,0)); endfor; drawoptions(); enddef; vardef Graduations= color ppp[]; for k=1 upto 5: ppp[k]:=(k,0,0); dotlabel.bot(format("%10f",k),Projette(ppp[k])); ppp[k]:=(0,k,0); dotlabel.bot(format("%10f",k),Projette(ppp[k])); ppp[k]:=(0,0,k); dotlabel.rt(format("%10f",k),Projette(ppp[k])); endfor; enddef; vardef Projectionxy(expr po)= color ess; ess=(redpart(po),greenpart(po),0); trace Projette(po)--Projette(ess) dashed dashpattern(on 12bp off6bp on 3bp off6bp) withcolor rouge; enddef; vardef Projectionyz(expr po)= color ess; ess=(0,greenpart(po),bluepart(po)); trace Projette(po)--Projette(ess) dashed dashpattern(on 12bp off6bp on 3bp off6bp) withcolor rouge; enddef; vardef Projectionzx(expr po)= color ess; ess=(redpart(po),0,bluepart(po)); trace Projette(po)--Projette(ess) dashed dashpattern(on 12bp off6bp on 3bp off6bp) withcolor rouge; enddef; vardef Projection(expr po)= Projectionxy(po); Projectionyz(po); Projectionzx(po); enddef; %%Surfaces d'équations paramétriques vardef FX(expr t,v)=cosd(c*t)*cosd(c*v) enddef; vardef FY(expr t,v)=cosd(c*t)*sind(c*v) enddef; vardef FZ(expr t,v)=sind(c*t) enddef; vardef FamilleDesCourbesEnU= for k=Udebut step pasU until Ufin+2*pasU: for j=Vdebut step pasV until Vfin: trace Projette((FX(k,j),FY(k,j),FZ(k,j)))--Projette((FX(k,j+pasV),FY(k,j+pasV),FZ(k,j+pasV))); endfor; endfor; enddef; vardef FamilleDesCourbesEnV= for k=Vdebut step pasV until Vfin+pasV: for j=Udebut step pasU until Ufin+pasU: trace Projette((FX(j,k),FY(j,k),FZ(j,k)))--Projette((FX(j+pasU,k),FY(j+pasU,k),FZ(j+pasU,k))); endfor; endfor; enddef; vardef InitialiseParametre(expr ud,uf,up,vd,vf,vp)= Udebut:=ud; Ufin:=uf; pasU:=up; Vdebut:=vd; Vfin:=vf; pasV:=vp; 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;