%Différents papiers (Nouvelle version)
%papiers1.mp
%Christophe Poulain
%création : 07 Septembre 2003
%Modification : 1 Mai 2005
%----------------------------------------------------------
input format;
init_numbers(btex $-$ etex, btex$1$etex, btex$ times 10$etex, btex$"" sup -$etex, btex$"" sup 2$etex);
%Constantes
color rouge,vert,bleu,jaune,noir,blanc,orange,rose,violet,ciel,orangevif,gris;
rouge=(1,0,0);
vert=(0,1,0);
bleu=(0,0,1);
noir=(0,0,0);
blanc=(1,1,1);
orange=(1,0.5,0);
violet=rouge+bleu;
rose=(1,0.7,0.7);
ciel=bleu+vert;
orangevif=(1,0.25,0.1);
jaune=rouge+vert;
gris=0.8*white;
boolean orig,uni;
orig=false;
vardef origine(expr p)=
x.origine:=x.so+xpart(p)*quad.u;
y.origine:=y.so+ypart(p)*quad.u;
orig:=true;
enddef;
vardef unites(expr g,h)=
x.u:=g*cm;
y.u:=h*cm;
uni:=true;
enddef;
vardef grille(expr t)=
save gri;
picture gri;
orig:=false;
x.u:=t*cm;
y.u:=t*cm;
quad.u:=t*cm;
gri=image(
path p[];
%horizontale
p1:=(x.so*cm,0)--(x.ne*cm,0);
%verticale
p2:=(0,y.so*cm)--(0,y.ne*cm);
%options
%horizontales
for i:=0 step t until (y.ne-y.so):
draw p1 shifted (0,i*cm);
endfor;
%verticales
for i:=0 step t until (x.ne-x.so) :
draw p2 shifted (i*cm,0);
endfor;
);
gri
enddef;
def enplace=
if orig:
xscaled x.u yscaled y.u shifted (z.origine)
else:
xscaled x.u yscaled y.u shifted (z.so)
fi
enddef;
vardef placepoint(expr q,r)=
(q,r) enplace
enddef;
vardef pp(expr qq,rr)=placepoint(qq,rr)
enddef;
def replace=
xscaled (1/x.u) yscaled (1/y.u) shifted (-z.origine*cm)
enddef;
def retrouvecoord(expr p)=%trasnforme les coordonées du point d'affixe p dans le repère absolu de metapost en les coordonnées du point dans le repère défini par l'utilisateur
p replace
enddef;
vardef papiermillimetre=
save $;
picture $;
orig:=false;
x.u:=1cm;
y.u:=1cm;
quad.u:=1cm;
$=image(
path p[];
%horizontale
p1:=(x.so*cm,0)--(x.ne*cm,0);
%verticale
p2:=(0,y.so*cm)--(0,y.ne*cm);
%grille millimétrique
pickup pencircle scaled 0.2;
%horizontales
for j:=y.so step 0.1 until y.ne:
draw p1 shifted (0,j*cm);
endfor;
%verticales
for j:=x.so step 0.1 until x.ne :
draw p2 shifted (j*cm,0);
endfor;
%grille demi-centimétrique
pickup pencircle scaled 0.5;
%horizontales
for j:=y.so step 0.5 until y.ne:
draw p1 shifted (0,j*cm);
endfor;
%verticales
for j:=x.so step 0.5 until x.ne :
draw p2 shifted (j*cm,0);
endfor;
%grille centimétrique
pickup pencircle scaled 0.7;
%horizontales
for j:=y.so step 1 until y.ne:
draw p1 shifted (0,j*cm);
endfor;
%verticales
for j:=x.so step 1 until x.ne :
draw p2 shifted (j*cm,0);
endfor;
%grille penta-centimétrique
pickup pencircle scaled 1;
%horizontales
for j:=y.so step 5 until y.ne:
draw p1 shifted (0,j*cm);
endfor;
%verticales
for j:=x.so step 5 until x.ne :
draw p2 shifted (j*cm,0);
endfor;
);
$
enddef;
vardef axes=
path axehor,axever;
axehor=(x.so*cm,y.origine)--(x.ne*cm,y.origine);
axever=(x.origine,y.so*cm)--(x.origine,y.ne*cm);
picture axx;
axx=image(
drawarrow (x.so*cm,y.origine)--(x.ne*cm,y.origine);
drawarrow (x.origine,y.so*cm)--(x.origine,y.ne*cm);
label.llft(btex $O$ etex,z.origine);
);
axx
enddef;
%graduation des axes
string marque_axe;
marque_axe:="simple";
vardef graduantx@#=
if marque_axe="complete":
for k=floor((x.so*cm-x.origine)/x.u) upto floor((x.ne*cm-x.origine)/x.u):
if k<>0:
dotlabel.@#(format("%10f",k),placepoint(k,0));
fi;
endfor;
elseif marque_axe="simple":
dotlabel.@#(format("%10f",1),placepoint(1,0));
fi;
enddef;
vardef graduanty@#=
if marque_axe="complete":
for k=floor((y.so*cm-y.origine)/y.u) upto floor((y.ne*cm-y.origine)/y.u):
if k<>0:
dotlabel.@#(format("%10f",k),placepoint(0,k));
fi;
endfor;
elseif marque_axe="simple":
dotlabel.@#(format("%10f",1),placepoint(0,1));
fi;
enddef;
vardef Pointe(text t)=
for p_=t: if pair p_:
fill fullcircle scaled 1mm shifted p_;
fi;
endfor;
enddef;
vardef papiercahier=
save $;
orig:=false;
picture $;
x.u:=8mm;
y.u:=8mm;
quad.u:=8mm;
$=image(
path p[];
%horizontale
p1:=(x.so*cm,0)--(x.ne*cm,0);
%verticale
p2:=(0,y.so*cm)--(0,y.ne*cm);
%grille 2-millimétrique
pickup pencircle scaled 0.5;
%lignes horizontales
for i:=y.ne step -0.2 until y.so:
draw p1 shifted (0,i*cm);
endfor;
%grille 8-millimétrique
pickup pencircle scaled 1bp;
%lignes horizontales
for i:=y.ne step -0.8 until y.so:
draw p1 shifted (0,i*cm);
endfor;
%lignes verticales
for i:=x.so step 0.8 until (x.ne+1):
draw p2 shifted (i*cm,0);
endfor;
);
$
enddef;
vardef papierdeuxlignes=
save $;
orig:=false;
picture $;
x.u:=8mm;
y.u:=6mm;
$=image(
path p[];
%horizontale
p1:=(x.so*cm,0)--(x.ne*cm,0);
%grille 2-millimétrique
pickup pencircle scaled 0.5;
%lignes horizontales
for i:=y.so+0.2 step 0.6 until y.ne:
draw p1 shifted (0,i*cm);
endfor;
%grille 8-millimétrique
pickup pencircle scaled 1;
%lignes horizontales
for i:=y.so step 0.6 until y.ne:
draw p1 shifted (0,i*cm);
endfor;
);
$
enddef;
vardef papierpointe=
save $;
picture $;
orig:=false;
x.u:=5mm;
y.u:=5mm;
quadu:=5mm;
$=image(
for i:=0 upto 2*(xpart(retrouvecoord(z.ne*cm))-xpart(retrouvecoord(z.so*cm))):
for j:=0 upto 2*(ypart(retrouvecoord(z.ne*cm))-ypart(retrouvecoord(z.so*cm))):
fill ((fullcircle scaled 1bp shifted(z.so*cm)) shifted ((i/2,j/2)*cm));
endfor
endfor;
);
$
enddef;
vardef papiertriangle=
save $;
orig:=false;
if uni=false:
x.u:=1cm;
y.u:=(sqrt(3)/2)*cm;
fi;
picture $;
$=image(
path p[];
%triangle haut
%p1:=(x.so*cm,0)--(x.so*cm+1cm,0)--((x.so*cm,0) rotatedabout((x.so*cm+1cm,0),-60))--cycle;
p1:=(x.so*cm,0)--(x.so*cm+x.u,0)--((x.so*cm,0) rotatedabout((x.so*cm+x.u,0),-60))--cycle;
%triangle bas
%p2:=((x.so*cm,0)--(x.so*cm+1cm,0)--((x.so*cm,0) rotatedabout((x.so*cm+1cm,0),60))--cycle) shifted (-0.5cm,((sqrt3)/2)*cm);
p2:=((x.so*cm,0)--(x.so*cm+x.u,0)--((x.so*cm,0) rotatedabout((x.so*cm+x.u,0),60))--cycle) shifted (-x.u/2,y.u);
%grille horizontale1
pickup pencircle scaled 0.5;
numeric etag;
etag=floor(2*cm*(ypart(retrouvecoord(z.ne*cm))-ypart(retrouvecoord(z.so*cm)))/(y.u))+1;
for i:=0 step 2 until etag:
for j:=0 upto (xpart(retrouvecoord(z.ne*cm))-xpart(retrouvecoord(z.so*cm))):
draw p1 shifted (j*x.u,i*y.u);
draw p2 shifted (j*x.u,i*y.u);
endfor
endfor;
%grille horizontale 2
pickup pencircle scaled 0.5;
for i:=1 step 2 until etag:
for j:=0 upto (xpart(retrouvecoord(z.ne*cm))-xpart(retrouvecoord(z.so*cm))):
draw p1 shifted ((j-1/2)*x.u,i*y.u);
draw p2 shifted ((j+1/2)*x.u,i*y.u);
endfor
endfor;
);
$
enddef;
vardef placepointtri(expr q,r)=
save $;
pair $;
if orig:
$=z.origine shifted (q*(x.u,0)+r*(x.u/2,y.u));
else:
$=z.so*cm shifted (q*(x.u,0)+r*(x.u/2,y.u));
fi;
$
enddef;
vardef papierisometriquepointe=
save $;
orig:=false;
y.u:=1cm;
x.u:=(sqrt(3)/2)*cm;
picture $;
$=image(
%grille horizontale1
pickup pencircle scaled 0.5;
for i:=0 step 1 until (ypart(retrouvecoord(z.ne*cm))-ypart(retrouvecoord(z.so*cm))):
for j:=0 step 2 until (xpart(retrouvecoord(z.ne*cm))-xpart(retrouvecoord(z.so*cm))+2):
fill (fullcircle scaled 1bp shifted (z.so*cm)) shifted (j*((sqrt3)/2)*cm,i*cm);
endfor
endfor;
%grille horizontale 2
for i:=0 step 1 until (ypart(retrouvecoord(z.ne*cm))-ypart(retrouvecoord(z.so*cm))-1):
for j:=1 step 2 until (xpart(retrouvecoord(z.ne*cm))-xpart(retrouvecoord(z.so*cm))+1):
fill (fullcircle scaled 1bp shifted (z.so*cm)) shifted (j*((sqrt3)/2)*cm,(i+0.5)*cm);
endfor
endfor;
);
$
enddef;
vardef papierisometrique=
save $;
orig:=false;
x.u:=(sqrt(3)/2)*cm;
y.u:=1cm;
picture $;
$=image(
path p[];
%triangle haut
p1:=(x.so*cm,1cm)--((x.so*cm,0) rotatedabout((x.so*cm,1cm),60))--(x.so*cm,0);
%triangle bas
p2:=((x.so*cm,1cm)--((x.so*cm,0) rotatedabout((x.so*cm,1cm),-60))--(x.so*cm,0)) shifted (((sqrt3)/2)*cm,0);
%grille horizontale1
pickup pencircle scaled 0.5;
for i:=0 step 2 until (xpart(retrouvecoord(z.ne*cm))-xpart(retrouvecoord(z.so*cm))):
for j:=0 upto (ypart(retrouvecoord(z.ne*cm))-ypart(retrouvecoord(z.so*cm))-1):
draw p1 shifted (i*((sqrt3)/2)*cm,j*cm);
draw p2 shifted ((i+1)*((sqrt3)/2)*cm,j*cm);
endfor
endfor;
);
$
enddef;
vardef papierhexagonal=
save $;
picture $;
orig:=false;
path hexa;
%hexagone de départ
hexa:=z.so*cm--(x.so*cm+1cm,y.so*cm)--(z.so*cm rotatedabout((x.so*cm+1cm,y.so*cm),-120))--((x.so*cm+1cm,y.so*cm) rotatedabout((z.so*cm rotatedabout((x.so*cm+1cm,y.so*cm),-120)),-120))--((z.so*cm rotatedabout((x.so*cm+1cm,y.so*cm),-120)) rotatedabout(((x.so*cm+1cm,y.so*cm) rotatedabout((z.so*cm rotatedabout((x.so*cm+1cm,y.so*cm),-120)),-120)),-120))--(((x.so*cm+1cm,y.so*cm) rotatedabout((z.so*cm rotatedabout((x.so*cm+1cm,y.so*cm),-120)),-120)) rotatedabout(((z.so*cm rotatedabout((x.so*cm+1cm,y.so*cm),-120)) rotatedabout(((x.so*cm+1cm,y.so*cm) rotatedabout((z.so*cm rotatedabout((x.so*cm+1cm,y.so*cm),-120)),-120)),-120)),-120))--cycle;
$=image(
pair centrehexa;
centrehexa=1/2[z.so*cm,((x.so*cm+1cm,y.so*cm) rotatedabout((z.so*cm rotatedabout((x.so*cm+1cm,y.so*cm),-120)),-120))];
pickup pencircle scaled 0.5;
numeric etag;
etag=floor((abs(y.ne*cm-y.so*cm))/((sqrt(3)/2)*cm));
for i:=0 step 3 until (abs(x.ne*cm-x.so*cm)/1cm):
for j:=0 step 2 until etag:
draw hexa shifted ((i+0.5)*cm,j*((sqrt 3)/2)*cm);
draw hexa shifted ((i+2)*cm,(j+1)*((sqrt 3)/2)*cm);
endfor
endfor;
);
$
enddef;
vardef reperehexa(expr colo,lign)=
save $;
path $;
if (colo mod 2)=1:
$=(hexa shifted(0.5cm,0)) shifted((colo-1)*1.5*cm,(lign-1)*2*((sqrt 3)/2)*cm);
else:
$=(hexa shifted(0.5cm,0)) shifted((colo-1)*1.5*cm,((lign-1)*2+1)*((sqrt 3)/2)*cm);
fi;
$
enddef;
vardef Centrehexa(expr colo,lign)=
save $;
pair $;
if (colo mod 2)=1:
$=(centrehexa shifted(0.5cm,0)) shifted((colo-1)*1.5*cm,(lign-1)*2*((sqrt 3)/2)*cm);
else:
$=(centrehexa shifted(0.5cm,0)) shifted((colo-1)*1.5*cm,((lign-1)*2+1)*((sqrt 3)/2)*cm);
fi;
$
enddef;
%Ajouté sur proposition de C.Kibleur.
vardef Projection(expr pp)=
save h,k,$;
pair h,k;
picture $;
$=image(
h - pp=whatever*(z.origine - (z.origine+(x.u,0))) rotated 90;
h=whatever[z.origine+(x.u,0),z.origine];
k - pp=whatever*(z.origine - (z.origine+(0,y.u))) rotated 90;
k=whatever[z.origine+(0,y.u),z.origine];
draw k--pp--h dashed evenly;
);
$
enddef;
|