vardef segment(expr aa,bb)= save Seg; path Seg; Seg=aa--bb; Seg enddef; vardef droite(expr AA,BB)= % nbdroites:=nbdroites+1; save Dro; path Dro; Dro=(_tfig/abs(AA-BB))[BB,AA]--(_tfig/abs(AA-BB))[AA,BB]; % Droites[nbdroites]=Dro; Dro enddef; vardef demidroite(expr AA,BB)= % nbdroites:=nbdroites+1; save Dem; path Dem; Dem=AA--(_tfig/abs(AA-BB))[AA,BB]; % Droites[nbdroites]=Dem; Dem enddef; vardef polygone(text t)= % nbpoly:=nbpoly+1; pair aaa[]; j:=0; for p_=t: if pair p_: j:=j+1; aaa[j]=p_; elseif color p_: j:=j+1; aaa[j]=Projette(p_); fi; endfor; aaa[j+1]:=aaa[1]; save $; picture $; $=image( fill aaa1-- for k=2 upto j: aaa[k]-- endfor cycle withcolor PfCdmarron withtransparency(1,0.3); trace aaa1-- for k=2 upto j: aaa[k]-- endfor cycle; ); % Polys[nbpoly]=$; $ enddef; vardef cercles(text t)= % nbcercles:=nbcercles+1; 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; 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 % Cerclesg[nbcercles]=Cer; Cer enddef; vardef thelabelgeo@#(expr s,z) = % Position s near z % nblabel:=nblabel+1; save p; picture p; if picture s: p=s else: p = s infont defaultfont scaled defaultscale fi; p:=p shifted (z + labeloffset*laboff@# - (labxf@#*lrcorner p + labyf@#*ulcorner p + (1-labxf@#-labyf@#)*llcorner p ) ); p:=image( draw p; marque_p:="plein"; drawoptions(withcolor PfCdblue); pointe(z); drawoptions(); draw fullcircle scaled (marque_r/5) shifted z; ); p enddef; def label = draw thelabelgeo enddef; vardef dotlabel@#(expr s,z) text t_ = label@#(s,z) t_; %interim linecap:=rounded; %draw z withpen pencircle scaled dotlabeldiam t_; enddef; def labelsimple = draw thelabel enddef; vardef appelation(expr aa,bb,decalage,cote)= save $; pair mapp; mapp=unitvector(bb-aa) rotated 90; picture $; $=image( labelsimple(cote rotated angle(bb-aa),(bb+aa)/2+decalage*mapp); ); $ enddef; 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; labelsimple(cote rotated angle(m2-m1),(m1+m2)/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; labelsimple(cote rotated angle(m2-m1),(m1+m2)/2); ); cot enddef; vardef Codeangle(expr aa,bb,cc,nb,nom)= % nbangles:=nbangles+1; save s,p,$; path p; picture $; $=image( fill coloreangle(aa,bb,cc) withcolor PfCdgreen withtransparency(1,0.3); trace marqueangle(aa,bb,cc,nb) withcolor PfCdgreen;% withtransparency(1,0.3); labelsimple(nom,w shifted(marque_ang*unitvector(w-bb))); ); % CodeAngles[nbangles]:=$; $ enddef; vardef codeperp(expr aa,bb,cc,m)=%normalement m=5 save codep; picture codep; codep=image( fill ((bb+m*unitvector(aa-bb))--(bb+m*unitvector(aa-bb)+m*unitvector(cc-bb))--(bb+m*unitvector(cc-bb)))--bb--cycle withcolor PfCdgreen withtransparency(1,0.3); trace ((bb+m*unitvector(aa-bb))--(bb+m*unitvector(aa-bb)+m*unitvector(cc-bb))--(bb+m*unitvector(cc-bb))) withcolor PfCdgreen; ); codep enddef; vardef GeoMarqueangle(expr aa,bb,cc,mark)=%codage d'un angle de sommet bb dans le sens direct par la marque mark. save $; picture $; path conf,rr; pair w,tangent; numeric t; rr=arccercle(bb+marque_a*unitvector(aa-bb),bb+marque_a*unitvector(cc-bb),bb); w=rr intersectionpoint Droite(bb,CentreCercleI(aa,bb,cc)); t=length rr/2; tangent=unitvector(direction t of rr); $=image( if mark=5: drawarrow rr; else: trace rr; fi; if mark=1: trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90); elseif mark=2: trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90) shifted tangent; trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90) shifted(-tangent); elseif mark=3: trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90); trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90) shifted(1.marque_s*tangent); trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,90) shifted(-1.marque_s*tangent); elseif mark=4: trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,45); trace rotation((w shifted(marque_s*tangent))--(w shifted(-marque_s*tangent)),w,-45); fi; ); $ enddef; vardef Mylabel(expr pic, p, t) = save myA; pair myA; save myalpha; numeric myalpha; myA = point t of p - marque_my*bp * unitvector(direction t of p) rotated 90; if abs(angle((point(length p) of p)-(point(0) of p)))>90: myalpha=if (angle((point(length p) of p)-(point(0) of p)))<0: -180 else:180 fi -angle((point(length p) of p)-(point(0) of p)); labelsimple(pic rotated(-myalpha), myA); else: myalpha=angle((point(length p) of p)-(point(0) of p)); labelsimple(pic rotated(myalpha), myA); fi; 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;