%%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;
|