%%--------------------------------------
%%outilssyr.mp
%%(Adaptation du fichier outilspoint.mp)
%%Création : Jeudi 13 Mars 2003
%%Dernière modification : 24/03/2008
%%--------------------------------------
%%Nécessaire pour les graduations
def position(suffix pos)=
if str pos="n" : top
elseif str pos="s" :bot
elseif str pos="o" :lft
elseif str pos="e" :rt
elseif str pos="se" :lrt
elseif str pos="so" :llft
elseif str pos="ne" :urt
elseif str pos="no" :ulft
fi
enddef;
vardef affixe@#(expr a) text pos =
x@#:=xpart a;
y@#:=ypart a;
label.position(pos)( str @#,z@#);
enddef;
%%Equerre
vardef equerre(expr dte,drte,perpe,sens,lo)=
save $;
picture $,fig;
fig=currentpicture;
pair ww,t[];
picture grad[],gradu[];
numeric long;
path intermede;
pair perpen,ptt,pttt;
perpen:=projection(perpe,dte,drte);
if sens=1 :
ptt:=lo*(drte-dte) rotated 90 shifted perpen;
else :
ptt:=lo*(drte-dte) rotated (-90) shifted perpen;
fi;
ww=unitvector(drte-dte);
intermede=ptt--(10[ptt,(perpen rotatedabout(ptt,30))]);
pttt:=intermede intersectionpoint (10[dte,drte]--10[drte,dte]);
long=floor(abs(perpen+7*unitvector(ptt-perpen)-ptt)*2.54/72);
gradu1=image(
for j=0 upto (2*long-1) :
for k=1 upto 4:
t[5*j+k]=(perpen+7*unitvector(ptt-perpen)) shifted (1mm*(5*j+k)*unitvector(ptt-perpen));
t[400+5*j+k]=t[5*j+k] shifted (2*sens*ww);
draw t[5*j+k]--t[400+5*j+k];
endfor;
endfor
);
gradu2=image(
for j=0 upto (long-1):
t[5*(2*j+1)]=(perpen+7*unitvector(ptt-perpen)) shifted (1mm*5*(2*j+1)*unitvector(ptt-perpen));
t[400+5*(2*j+1)]=t[5*(2*j+1)] shifted (4*sens*ww);
draw t[5*(2*j+1)]--t[400+5*(2*j+1)];
endfor
);
gradu3=image(
for j=0 upto long:
t[10*j]=(perpen+7*unitvector(ptt-perpen)) shifted (1mm*10*j*unitvector(ptt-perpen));
t[400+10*j]=t[10*j] shifted (7*sens*ww);
if abs(ptt-t[10*j])>5mm:
draw t[10*j]--t[400+10*j];
fi
endfor
);
for j=0 upto long:
grad[j]=image(
affixe[j](t[400+10*j])s;
currentpicture:=currentpicture rotatedabout(t[400+10*j],90+angle(t[400+10*j]-t[10*j]));
);
endfor;
$=image(
path ouverture;
ouverture:=buildcycle(droite(1/5[perpen,pttt] shifted (10mm*unitvector(ptt-perpen)),1/5[pttt,perpen] shifted (10mm*unitvector(ptt-perpen))),droite(1/5[perpen,ptt] shifted (10mm*unitvector(pttt-perpen)),1/5[ptt,perpen] shifted (10mm*unitvector(pttt-perpen))),droite((1/5[pttt,ptt] shifted (10mm*unitvector(ptt-pttt))) rotatedabout(1/5[pttt,ptt],90),(1/5[ptt,pttt] shifted (10mm*unitvector(ptt-pttt))) rotatedabout(1/5[ptt,pttt],90)));
draw ouverture;
draw perpen--ptt--pttt--cycle;
draw codeperp(ptt,perpen,pttt,5);
for j=0 upto long:
if abs(z.[j]-ptt)>1cm :
draw grad[j];
fi
endfor;
for j=1 upto 3:
draw gradu[j];
endfor;
draw fig;
fig:=currentpicture;
currentpicture:=nullpicture;
fill (perpen--ptt--pttt--cycle) withcolor 0.9*white;
fill ouverture withcolor white;
draw fig;
);
$
enddef;
%%Règle
vardef regle(expr depart,arrivee,rr)=
save $;
picture $,grad[],gradu[],final;
pair t[];
path reduit;
t1000=depart shifted (5*unitvector(depart-arrivee));
t1003=arrivee shifted (20*unitvector(arrivee-depart));
t1004=(unitvector(arrivee-depart) rotated (-90)) shifted t1000;
t1001=t1000 shifted (50*(t1004-t1000));
t1002=t1001 shifted (t1003-t1000);
reduit=t1000--t1001--t1002..(t1002 shifted(5*unitvector(t1001-t1002)+1/4(t1003-t1002)))..(t1002 shifted(5*unitvector(t1002-t1001)+2/4(t1003-t1002)))..(t1002 shifted(5*unitvector(t1001-t1002)+3/4(t1003-t1002)))..t1003--cycle;
gradu1=image(
for k=0 upto 59:
for j=1 upto 4:
t[5*k+j]=depart shifted (1mm*(5*k+j)*unitvector(arrivee-depart));
t[400+5*k+j]=t[5*k+j] shifted (2*(t1004-t1000));
draw t[5*k+j]--t[400+5*k+j];
endfor;
endfor
);
gradu2=image(
for k=0 upto 29:
t[5*(2*k+1)]=depart shifted (1mm*5*(2*k+1)*unitvector(arrivee-depart));
t[400+5*(2*k+1)]=t[5*(2*k+1)] shifted (5*(t1004-t1000));
draw t[5*(2*k+1)]--t[400+5*(2*k+1)];
endfor
);
gradu3=image(
for k=0 upto 30:
t[10*k]=depart shifted(1mm*10*k*unitvector(arrivee-depart));
t[400+10*k]=t[10*k] shifted (10*(t1004-t1000));
draw t[10*k]--t[400+10*k];
endfor
);
for j=0 upto 30:
grad[j]=image(
affixe[j](t[400+10*j])s;
currentpicture:=currentpicture rotatedabout(t[400+10*j],90+angle(t[400+10*j]-t[10*j]));
);
endfor
final=image(
for k=0 upto 30:
draw grad[k];
endfor
for k=1 upto 3:
draw gradu[k];
endfor
clip currentpicture to reduit;
draw reduit;
);
if rr=-1:
$=image(
draw final rotatedabout(1/2[depart,arrivee],180);
);
else:
$=image(
draw final;
);
fi
$
enddef;
%%Crayon
vardef crayon(expr depart,arrive,l,m)=
save $;
picture $,crayolat;
pair w[];
w0=(0,0);
w1=(1,2)*u/2;
w2=(-1,2)*u/2;
w3=(0,2)*u/2;
w4=(0,7)*m*u/2;
path ccc,ccd;
ccc=cercles(w0,abs(w3-w2));
ccd=ccc yscaled 0.25 shifted w3;
crayolat=image(
draw subpath((length ccd)/2,length ccd) of ccd;
draw ccd shifted (w4-w3);
draw w2--w0--w1;
draw w1--((1,7*m)*u/2);
draw w2--((-1,7*m)*u/2);
);
$=(crayolat rotated(angle(arrive-depart)-30)) shifted l[depart,arrive];
$
enddef;
%%Rapporteur
vardef rapporteurdouble(expr centre,segment,rr)=
save $,cc,cd,v,w,t,ww,vv;
picture $;
path cc,cd;
pair a[],b[],v,w,t,ww,vv,rap[],rapp[];
cc=cercle(centre,0.75*abs(centre-segment));
t=cc intersectionpoint (centre--segment);
w=t-2*unitvector(segment-centre);v=symetrie(w,t);
ww=t-5*unitvector(segment-centre);vv=symetrie(ww,t);
a0=(ww-centre) shifted centre;
b0=(vv-centre) shifted centre;
for i=0 upto 35 :
for j=1 upto 4 :
a[5*i+j]=(w-centre) rotated (rr*(5*i+j)) shifted centre;
b[5*i+j]=(v-centre) rotated (rr*(5*i+j)) shifted centre;
endfor;
a[5*(i+1)]=(ww-centre) rotated (rr*(5*(i+1))) shifted centre;
b[5*(i+1)]=(vv-centre) rotated (rr*(5*(i+1))) shifted centre;
endfor
picture nomb[],nombre[];
if rr=1:
for j=0 upto 18:
nombre[10*j]=image(
affixe.[10*j](a[10*j])s;
currentpicture:=currentpicture rotatedabout(a[10*j],angle(a[10*j]-centre)-90);
);
endfor
for j=0 upto 18:
nombre[10*j+1]=image(
affixe.[180-10*j](b[10*j])n;
currentpicture:=currentpicture rotatedabout(b[10*j],angle(b[10*j]-centre)-90);
);
endfor
else:
for j=0 upto 18:
nombre[10*j]=image(
affixe.[180-10*j](a[10*j])s;
currentpicture:=currentpicture rotatedabout(a[10*j],angle(a[10*j]-centre)-90);
);
endfor
for j=18 downto 0:
nombre[10*j+1]=image(
affixe.[10*j](b[10*j])n;
currentpicture:=currentpicture rotatedabout(b[10*j],angle(b[10*j]-centre)-90);
);
endfor
fi
$=image(
for i=0 upto 18 :
draw nombre[10*i];
draw nombre[10*i+1];
endfor
path cerc;
cerc=subpath((angle(segment-centre)*(length cc))/360,((length cc)/2)+(angle(segment-centre)*(length cc))/360) of cc;
if rr=-1:
draw cerc reflectedabout(segment,centre);
else:
draw cerc;
fi
draw a0--b0 withpen pencircle scaled 1.25bp;
for i=0 upto 35 :
for j=1 upto 4 :
draw a[5*i+j]--b[5*i+j];
endfor;
endfor
for i=1 upto 36:
draw a[5*i]--b[5i] withpen pencircle scaled 1.25bp;
endfor
draw a0--a180;
path cent;
cent=cercle(centre,0.05*u);
fill cent withcolor red;
);
$
enddef;
vardef rapporteurequerre(expr centre,segmt,rr)=
save $,cc,cd,v,w,t,ww,vv;
picture $;
path cc,cd;
pair a[],b[],v,w,t,ww,vv,rap[],rapp[];
cc=cercles(centre,abs(centre-segmt));
t=segmt;
w=t-10*unitvector(segmt-centre);
%ww=t-5*unitvector(segmt-centre);vv=symetrie(ww,t);
a0=segmt;
b0=w;
$=image(
path cd;
cd=segmt--rotation(segmt,centre,90)--symetrie(segmt,centre);
trace cd--cycle;
for i=0 upto 35 :
for j=1 upto 4 :
a[5*i+j]=demidroite(centre,pointarc(cc,angle(segmt-centre)+5*i+j)) intersectionpoint cd;
b[5*i+j]-a[5*i+j]=5*unitvector(centre-a[5*i+j]);
endfor;
a[5*(i+1)]=demidroite(centre,pointarc(cc,angle(segmt-centre)+5*(i+1))) intersectionpoint cd;
b[5*(i+1)]-a[5*(i+1)]=10*unitvector(centre-a[5*(i+1)]);
endfor;
for i=0 upto 35 :
for j=1 upto 4 :
draw a[5*i+j]--b[5*i+j];
endfor;
endfor;
for i=0 upto 36:
draw a[5*i]--b[5i] withpen pencircle scaled 1.25bp;
endfor
trace cotationmilrap(centre,a10,0,15,btex 10 etex);
trace cotationmilrap(centre,a20,0,15,btex 20 etex);
trace cotationmilrap(centre,a30,0,15,btex 30 etex);
trace cotationmilrap(centre,a40,0,15,btex 40 etex);
trace cotationmilrap(centre,a50,0,15,btex 50 etex);
trace cotationmilrap(centre,a60,0,15,btex 60 etex);
trace cotationmilrap(centre,a70,0,15,btex 70 etex);
trace cotationmilrap(centre,a80,0,15,btex 80 etex);
trace cotationmilrap(centre,a90,0,15,btex 90 etex);
trace cotationmilrap(centre,a100,0,15,btex 100 etex);
trace cotationmilrap(centre,a110,0,15,btex 110 etex);
trace cotationmilrap(centre,a120,0,15,btex 120 etex);
trace cotationmilrap(centre,a130,0,15,btex 130 etex);
trace cotationmilrap(centre,a140,0,15,btex 140 etex);
trace cotationmilrap(centre,a150,0,15,btex 150 etex);
trace cotationmilrap(centre,a160,0,15,btex 160 etex);
trace cotationmilrap(centre,a170,0,15,btex 170 etex);
);
$
enddef;
%%Compas
vardef compas(expr centre,extre,n)=
save $;
picture $;
pair r,s,t,a,b,c,d,e,f;
if (abs(centre-extre)<10*u):
r=((extre-1/2[centre,extre]) rotated (n*90)) shifted (1/2[centre,extre]);
else:
r=0.25[1/2[centre,extre],((extre-1/2[centre,extre]) rotated (n*90)) shifted (1/2[centre,extre])];
fi
s=(1+50/abs(centre-extre))[1/2[centre,extre],r];
t=10*unitvector(extre-centre) rotated (n*90);
a=centre shifted t;
b=s shifted (5*unitvector(centre-extre)+10*unitvector(s-r));
c=b shifted (30*unitvector(s-r));
d=c reflectedabout(r,s);
e=b reflectedabout(r,s);
f=a reflectedabout(r,s);
path comp;
comp=a--b--c--d--e--f--s--a--cycle;
$=image(
fill comp withcolor black;
draw centre--a withpen pencircle scaled 1.5bp;
draw f--extre withpen pencircle scaled 1.5bp withcolor 0.25[red,blue];
);
$
enddef;
endinput
|