%% gjkt.mf %% posledni uprava 11.1.1998 def penc = pickup pencircle scaled enddef; %% pera def pens = pickup pensquare scaled enddef; def overdraw(expr p)=erase fill p; draw p; enddef; %% p©ekreslen¡ def frame=draw unitsquare xscaled w yscaled h; enddef; %% r me‡ek def axis(expr bod,delka)= %% osy draw (0,ypart bod)--(w,ypart bod); draw (xpart bod,0)--(xpart bod,h); arrow(delka,90,(xpart bod,h)); arrow(delka,0,(w,ypart bod)); enddef; def halfaxis(expr bod,delka)= %% p–losy draw bod--(w,ypart bod); draw bod--(xpart bod,h); arrow(delka,90,(xpart bod,h)); arrow(delka,0,(w,ypart bod)); enddef; def scale(expr bod,delka,dw,dh)= %% mˆ©¡tka for i=1 upto ((w-3mm-xpart bod)/dw): draw ((0,delka/2)--(0,-delka/2)) shifted (bod+i*(dw,0)); endfor; for i=1 upto ((xpart bod)/dw): draw ((0,delka/2)--(0,-delka/2)) shifted (bod-i*(dw,0)); endfor; for i=1 upto ((h-3mm-ypart bod)/dh): draw ((delka/2,0)--(-delka/2,0)) shifted (bod+i*(0,dh)); endfor; for i=1 upto ((ypart bod)/dh): draw ((delka/2,0)--(-delka/2,0)) shifted (bod-i*(0,dh)); endfor; enddef; def net(expr dilek)= %% s¡Ÿ for i=0 upto w/dilek+.1: draw (i*dilek,0)--(i*dilek,h); endfor; for i=0 s upto h/dilek+.1: draw (0,i*dilek)--(w,i*dilek); endfor; enddef; def arrow(expr delka,smer,bod)= %% ¨ipka begingroup save x,y; z1=(0,0); x2=x3=-delka; -y2=y3=2/7delka; draw (z2--z1--z3) rotated smer shifted bod; endgroup enddef; def farrow(expr delka,smer,bod)= %% pln  ¨ipka begingroup save x,y; z1=origin; x2=x3=x1-delka; y1-y2=y3-y1=2/7delka; filldraw ((z3--z2--z1--cycle) rotated smer shifted bod); endgroup enddef; def earrow(expr delka,smer,bod)= %% prazdn  ¨ipka begingroup save x,y; z1=origin; x2=x3=x1-delka; y1-y2=y3-y1=2/7delka; overdraw((z3--z2--z1--cycle) rotated smer shifted bod); endgroup enddef; def vector(expr bod,velikost,delka,smer)= %% vektor begingroup save x,y; z1=bod; z2=(velikost,0) rotated smer shifted bod; draw z1--z2; arrow(delka,smer,z2); endgroup enddef; def vect(expr boda,bodb,delka)= %% vektor ur‡en˜ po‡ tkem a koncem begingroup save x,y; z1=boda; z2=bodb; smer:=angle(z2-z1); draw z1--z2; arrow(delka,smer,z2); endgroup enddef; def dim(expr boda,bodb,delka)= %% k¢ta begingroup save x,y; z1=boda; z2=bodb; smer:=angle(z2-z1); draw z1--z2; arrow(delka,smer,z2); arrow(delka,smer+180,z1); endgroup enddef; def R(expr bod,uhel)= %% zna‡ka pro prav˜ £hel draw quartercircle scaled 6mm rotated uhel shifted bod; drawdot 1.7mm*dir45 rotated uhel shifted bod withpen currentpen scaled 3; enddef; def circ(expr boda,bodb,bodc)= %% kru‘nice ur‡en  t©emi body begingroup save x,y,r; z1=boda; z2=bodb; z3=bodc; z12=1/2[z1,z2]; z23=1/2[z2,z3]; z0-z12=whatever*((z1-z2) rotated 90); z0-z23=whatever*((z3-z2) rotated 90); r=length(z1-z0); draw fullcircle scaled 2r shifted z0; endgroup enddef; def dashline(expr boda,bodb,n)= %% ‡ rkovan  £se‡ka for t=0 upto n: draw (3t/(3n+2))[boda,bodb]--((3t+2)/(3n+2))[boda,bodb]; endfor; enddef; def dotline(expr boda,bodb,n)= %% te‡kovan  £se‡ka for t=0 upto n: drawdot (t/n)[boda,bodb]; endfor; enddef; def dashdotline(expr boda,bodb,n)= %% ‡erchovan  £se‡ka for t=0 upto n: draw (5t/(5n+3))[boda,bodb]--((5t+3)/(5n+3))[boda,bodb]; endfor; for t=0 upto (n-1): drawdot ((5t+4)/(5n+3))[boda,bodb]; endfor; enddef; def odot(expr bod,r)= %% krou‘ek overdraw(fullcircle scaled 2r shifted bod); enddef; def dashcircle(expr stred,r,uhel,n)= %% ‡ rkovan  kru‘nice %% parametr £hel ur‡uje polohu za‡ tku prvn¡ ‡ rky for t=0 upto (n-1): arc(stred,r,t*360/n+uhel,(t+2/3)*360/n+uhel); endfor; enddef; def dashdotcircle(expr stred,r,uhel,n)= %% ‡erchovan  kru‘nice for t=0 upto (n-1): arc(stred,r,t*360/n+uhel,(t+3/5)*360/n+uhel); arc(stred,r,(t+4/5)*360/n+uhel,(t+4/5)*360/n+uhel); endfor; enddef; def dotcircle(expr stred,r,uhel,n)= %% te‡kovan  kru‘nice for t=0 upto (n-1): arc(stred,r,t*360/n+uhel,t*360/n+uhel); endfor; enddef; def arc(expr stred,r,uhela,uhelb)= %% oblouk begingroup save x,y; z1=stred+dir(uhela)*r; z2=stred+dir(uhelb)*r; z3=stred+dir((uhelb+uhela)/2)*r; draw z1{dir(uhela+90)}..z3..{dir(uhelb+90)}z2; endgroup enddef; def dasharc(expr stred,r,uhela,uhelb,n)= %% ‡ rkovan˜ oblouk for t=0 upto n: arc(stred,r,t*(uhelb-uhela)/(n+2/3)+uhela, (t+2/3)*(uhelb-uhela)/(n+2/3)+uhela); endfor; enddef; def dashdotarc(expr stred,r,uhela,uhelb,n)= %% ‡erchovan˜ oblouk for t=0 upto n: arc(stred,r,5*t*(uhelb-uhela)/(5*n+3)+uhela, (5*t+3)*(uhelb-uhela)/(5*n+3)+uhela); endfor; for t=0 upto (n-1): arc(stred,r,(5*t+4)*(uhelb-uhela)/(5*n+3)+uhela, (5*t+4)*(uhelb-uhela)/(5*n+3)+uhela); endfor; enddef; def dotarc(expr stred,r,uhela,uhelb,n)= %% te‡kovan˜ oblouk for t=0 upto n: arc(stred,r,t*(uhelb-uhela)/n+uhela,t*(uhelb-uhela)/n+uhela); endfor; enddef; def dashpath(expr p,pocet_carek,pomer)= %% ‡ rkovan  k©ivka begingroup %% pomer=d‚lka_‡arky/d‚lka_mezery save t,tz,krok,s,d_carky,d_mez; krok:=0.001; t:=0; s:=0; forever: t:=t+krok; s:=s+length((point t of p)-(point (t-krok) of p)); exitif t>length(p); endfor; d_carky:=s*pomer/(pocet_carek*pomer+pocet_carek-1); d_mez:=s/(pocet_carek*pomer+pocet_carek-1); t:=0; forever: tz:=t; s:=0; forever: t:=t+krok; s:=s+length((point t of p)-(point (t-krok) of p)); exitif (s>=d_carky) or (t>length(p)); endfor; draw subpath(tz,t) of p; s:=0; forever: t:=t+krok; s:=s+length((point t of p)-(point (t-krok) of p)); exitif (s>=d_mez) or (t>length(p)); endfor; exitif t>length(p); endfor; endgroup enddef; def dashdotpath(expr p,pocet_carek,pomer)= %% ‡erchovan  k©ivka begingroup %% pomer=d‚lka_‡arky/d‚lka_mezery save t,tz,krok,s,d_carky,d_mez; krok:=0.001; t:=0; s:=0; forever: t:=t+krok; s:=s+length((point t of p)-(point (t-krok) of p)); exitif t>length(p); endfor; d_carky:=s*pomer/(pocet_carek*pomer+2pocet_carek-2); d_mez:=s/(pocet_carek*pomer+2pocet_carek-2); t:=0; forever: tz:=t; s:=0; forever: t:=t+krok; s:=s+length((point t of p)-(point (t-krok) of p)); exitif (s>=d_carky) or (t>length(p)); endfor; draw subpath(tz,t) of p; s:=0; forever: t:=t+krok; s:=s+length((point t of p)-(point (t-krok) of p)); exitif (s>=d_mez) or (t>length(p)); endfor; drawdot point t of p; s:=0; forever: t:=t+krok; s:=s+length((point t of p)-(point (t-krok) of p)); exitif (s>=d_mez) or (t>length(p)); endfor; exitif t>length(p); endfor; endgroup enddef; def dashcyclepath(expr p,pocet_carek,pomer)= begingroup save t,tz,krok,s,d_carky,d_mez,poc; krok:=0.001; t:=0; s:=0; %% ‡ rkovan  uzav©en  k©ivka forever: %% pomer=d‚lka_‡arky/d‚lka_mezery t:=t+krok; %% prvn¡ a posledn¡ ‡ rka je dvakr t krat¨¡ s:=s+length((point t of p)-(point (t-krok) of p)); exitif t>length(p); endfor; d_carky:=s*pomer/(pocet_carek*pomer+pocet_carek); d_mez:=s/(pocet_carek*pomer+pocet_carek); t:=0; poc:=0; forever: tz:=t; s:=0; poc:=poc+1; forever: t:=t+krok; s:=s+length((point t of p)-(point (t-krok) of p)); if ((poc=1) or (poc=pocet_carek+1)): exitif (s>=d_carky/2) or (t>length(p)); fi; exitif s>=d_carky; endfor; draw subpath(tz,t) of p; exitif t>length(p); s:=0; forever: t:=t+krok; s:=s+length((point t of p)-(point (t-krok) of p)); exitif (s>=d_mez) or (t>length(p)); endfor; exitif t>length(p); endfor; endgroup enddef; def dotpath(expr p,pocet_tecek)= %% te‡kovan  k©ivka begingroup save t,krok,s,d_mez; krok:=0.001; t:=0; s:=0; forever: t:=t+krok; s:=s+length((point t of p)-(point (t-krok) of p)); exitif t>length(p); endfor; d_mez:=s/(pocet_tecek-1); t:=0; drawdot(point t of p); forever: s:=0; forever: t:=t+krok; s:=s+length((point t of p)-(point (t-krok) of p)); exitif (s>=d_mez) or (t>length(p)); endfor; drawdot(point t of p); exitif t>length(p); endfor; endgroup enddef;