home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 February / Chip_2000-02_cd.bin / servis / tipy / web / CSTUG / KRESLIME / KRESLIME.ZIP / GJKT.MF < prev    next >
Encoding:
Text File  |  1998-02-14  |  8.5 KB  |  324 lines

  1. %% gjkt.mf
  2. %% posledni uprava 11.1.1998
  3.  
  4. def penc = pickup pencircle scaled enddef; %% pera
  5.  
  6. def pens = pickup pensquare scaled enddef;
  7.  
  8. def overdraw(expr p)=erase fill p; draw p; enddef; %% p⌐ekreslení
  9.  
  10. def frame=draw unitsquare xscaled w yscaled h; enddef; %% rámeçek
  11.  
  12. def axis(expr bod,delka)= %% osy
  13.   draw (0,ypart bod)--(w,ypart bod); 
  14.   draw (xpart bod,0)--(xpart bod,h);
  15.   arrow(delka,90,(xpart bod,h));
  16.   arrow(delka,0,(w,ypart bod));
  17. enddef;
  18.  
  19. def halfaxis(expr bod,delka)= %% pûlosy
  20.   draw bod--(w,ypart bod); draw bod--(xpart bod,h);
  21.   arrow(delka,90,(xpart bod,h));
  22.   arrow(delka,0,(w,ypart bod));
  23. enddef;
  24.  
  25. def scale(expr bod,delka,dw,dh)= %% mê⌐ítka
  26.   for i=1 upto ((w-3mm-xpart bod)/dw):
  27.     draw ((0,delka/2)--(0,-delka/2)) shifted (bod+i*(dw,0)); 
  28.   endfor;
  29.   for i=1 upto ((xpart bod)/dw):
  30.     draw ((0,delka/2)--(0,-delka/2)) shifted (bod-i*(dw,0)); 
  31.   endfor;
  32.   for i=1 upto ((h-3mm-ypart bod)/dh):
  33.     draw ((delka/2,0)--(-delka/2,0)) shifted (bod+i*(0,dh)); 
  34.   endfor;
  35.   for i=1 upto ((ypart bod)/dh):
  36.     draw ((delka/2,0)--(-delka/2,0)) shifted (bod-i*(0,dh)); 
  37.   endfor;
  38. enddef;
  39.  
  40. def net(expr dilek)= %% síƒ
  41.   for i=0 upto w/dilek+.1:
  42.     draw (i*dilek,0)--(i*dilek,h);
  43.   endfor;
  44.   for i=0 s upto h/dilek+.1:
  45.     draw (0,i*dilek)--(w,i*dilek);
  46.   endfor;
  47. enddef;
  48.  
  49. def arrow(expr delka,smer,bod)= %% ¿ipka
  50.   begingroup
  51.     save x,y;
  52.     z1=(0,0); x2=x3=-delka; -y2=y3=2/7delka;
  53.     draw (z2--z1--z3) rotated smer shifted bod;
  54.   endgroup
  55. enddef;
  56.  
  57. def farrow(expr delka,smer,bod)= %% plná ¿ipka
  58.   begingroup
  59.     save x,y;
  60.     z1=origin; x2=x3=x1-delka; y1-y2=y3-y1=2/7delka;
  61.     filldraw ((z3--z2--z1--cycle) rotated smer shifted bod);
  62.   endgroup
  63. enddef;
  64.  
  65. def earrow(expr delka,smer,bod)= %% prazdná ¿ipka
  66.   begingroup
  67.     save x,y;
  68.     z1=origin; x2=x3=x1-delka; y1-y2=y3-y1=2/7delka;
  69.     overdraw((z3--z2--z1--cycle) rotated smer shifted bod);
  70.   endgroup
  71. enddef;
  72.  
  73. def vector(expr bod,velikost,delka,smer)= %% vektor
  74.   begingroup
  75.     save x,y;
  76.     z1=bod; z2=(velikost,0) rotated smer shifted bod;
  77.     draw z1--z2;
  78.     arrow(delka,smer,z2);
  79.   endgroup
  80. enddef;
  81.  
  82. def vect(expr boda,bodb,delka)= %% vektor urçenÿ poçátkem a koncem
  83.   begingroup
  84.     save x,y;
  85.     z1=boda; z2=bodb; smer:=angle(z2-z1);
  86.     draw z1--z2;
  87.     arrow(delka,smer,z2);
  88.   endgroup
  89. enddef;
  90.  
  91. def dim(expr boda,bodb,delka)= %% kóta
  92.   begingroup
  93.     save x,y;
  94.     z1=boda; z2=bodb; smer:=angle(z2-z1);
  95.     draw z1--z2;
  96.     arrow(delka,smer,z2); arrow(delka,smer+180,z1);
  97.   endgroup
  98. enddef;
  99.  
  100. def R(expr bod,uhel)= %% znaçka pro pravÿ úhel
  101.   draw quartercircle scaled 6mm rotated uhel shifted bod;
  102.   drawdot 1.7mm*dir45 rotated uhel shifted bod
  103.     withpen currentpen scaled 3;
  104. enddef;
  105.  
  106. def circ(expr boda,bodb,bodc)= %% kruænice urçená t⌐emi body
  107.   begingroup
  108.     save x,y,r;
  109.     z1=boda; z2=bodb; z3=bodc; z12=1/2[z1,z2]; z23=1/2[z2,z3];
  110.     z0-z12=whatever*((z1-z2) rotated 90);
  111.     z0-z23=whatever*((z3-z2) rotated 90);
  112.     r=length(z1-z0);
  113.     draw fullcircle scaled 2r shifted z0;
  114.   endgroup
  115. enddef;
  116.  
  117. def dashline(expr boda,bodb,n)=      %% çárkovaná úseçka
  118.   for t=0 upto n:
  119.     draw (3t/(3n+2))[boda,bodb]--((3t+2)/(3n+2))[boda,bodb];
  120.   endfor;
  121. enddef;
  122.  
  123. def dotline(expr boda,bodb,n)= %% teçkovaná úseçka
  124.   for t=0 upto n: drawdot (t/n)[boda,bodb]; endfor;
  125. enddef;
  126.  
  127. def dashdotline(expr boda,bodb,n)=   %% çerchovaná úseçka
  128.   for t=0 upto n:
  129.     draw (5t/(5n+3))[boda,bodb]--((5t+3)/(5n+3))[boda,bodb];
  130.   endfor;
  131.   for t=0 upto (n-1):
  132.     drawdot ((5t+4)/(5n+3))[boda,bodb];
  133.   endfor;
  134. enddef;
  135.  
  136. def odot(expr bod,r)= %% krouæek
  137.   overdraw(fullcircle scaled 2r shifted bod);
  138. enddef;
  139.  
  140. def dashcircle(expr stred,r,uhel,n)=  %% çárkovaná kruænice
  141.          %% parametr úhel urçuje polohu zaçátku první çárky
  142.   for t=0 upto (n-1):
  143.     arc(stred,r,t*360/n+uhel,(t+2/3)*360/n+uhel);
  144.   endfor;
  145. enddef;
  146.  
  147. def dashdotcircle(expr stred,r,uhel,n)= %% çerchovaná kruænice
  148.   for t=0 upto (n-1):
  149.     arc(stred,r,t*360/n+uhel,(t+3/5)*360/n+uhel);
  150.     arc(stred,r,(t+4/5)*360/n+uhel,(t+4/5)*360/n+uhel);
  151.   endfor;
  152. enddef;
  153.  
  154. def dotcircle(expr stred,r,uhel,n)= %% teçkovaná kruænice
  155.   for t=0 upto (n-1):
  156.     arc(stred,r,t*360/n+uhel,t*360/n+uhel);
  157.   endfor;
  158. enddef;
  159.  
  160. def arc(expr stred,r,uhela,uhelb)= %% oblouk
  161.   begingroup
  162.     save x,y;
  163.     z1=stred+dir(uhela)*r;
  164.     z2=stred+dir(uhelb)*r;
  165.     z3=stred+dir((uhelb+uhela)/2)*r;
  166.     draw z1{dir(uhela+90)}..z3..{dir(uhelb+90)}z2;
  167.   endgroup
  168. enddef;
  169.  
  170. def dasharc(expr stred,r,uhela,uhelb,n)= %% çárkovanÿ oblouk
  171.   for t=0 upto n:
  172.     arc(stred,r,t*(uhelb-uhela)/(n+2/3)+uhela,
  173.       (t+2/3)*(uhelb-uhela)/(n+2/3)+uhela);
  174.   endfor;
  175. enddef;
  176.  
  177. def dashdotarc(expr stred,r,uhela,uhelb,n)= %% çerchovanÿ oblouk
  178.   for t=0 upto n:
  179.     arc(stred,r,5*t*(uhelb-uhela)/(5*n+3)+uhela,
  180.       (5*t+3)*(uhelb-uhela)/(5*n+3)+uhela);
  181.   endfor;
  182.   for t=0 upto (n-1):
  183.     arc(stred,r,(5*t+4)*(uhelb-uhela)/(5*n+3)+uhela,
  184.       (5*t+4)*(uhelb-uhela)/(5*n+3)+uhela);
  185.   endfor;
  186. enddef;
  187.  
  188. def dotarc(expr stred,r,uhela,uhelb,n)= %% teçkovanÿ oblouk
  189.   for t=0 upto n:
  190.     arc(stred,r,t*(uhelb-uhela)/n+uhela,t*(uhelb-uhela)/n+uhela);
  191.   endfor;
  192. enddef;
  193.  
  194. def dashpath(expr p,pocet_carek,pomer)= %%  çárkovaná k⌐ivka
  195.   begingroup            %% pomer=délka_çarky/délka_mezery
  196.   save t,tz,krok,s,d_carky,d_mez;
  197.   krok:=0.001; t:=0; s:=0;
  198.   forever:
  199.     t:=t+krok;
  200.     s:=s+length((point t of p)-(point (t-krok) of p));
  201.     exitif t>length(p);
  202.   endfor;
  203.   d_carky:=s*pomer/(pocet_carek*pomer+pocet_carek-1);
  204.   d_mez:=s/(pocet_carek*pomer+pocet_carek-1);
  205.   t:=0;
  206.   forever:
  207.     tz:=t; s:=0;
  208.     forever:
  209.       t:=t+krok;
  210.       s:=s+length((point t of p)-(point (t-krok) of p));
  211.       exitif (s>=d_carky) or (t>length(p));
  212.     endfor;
  213.     draw subpath(tz,t) of p;
  214.     s:=0;
  215.     forever:
  216.       t:=t+krok;
  217.       s:=s+length((point t of p)-(point (t-krok) of p));
  218.       exitif (s>=d_mez) or (t>length(p));
  219.     endfor;
  220.     exitif t>length(p);
  221.   endfor;
  222.   endgroup
  223. enddef;
  224.  
  225.  
  226. def dashdotpath(expr p,pocet_carek,pomer)=  %% çerchovaná k⌐ivka
  227.   begingroup                 %% pomer=délka_çarky/délka_mezery
  228.   save t,tz,krok,s,d_carky,d_mez;
  229.   krok:=0.001; t:=0; s:=0;
  230.   forever:
  231.     t:=t+krok;
  232.     s:=s+length((point t of p)-(point (t-krok) of p));
  233.     exitif t>length(p);
  234.   endfor;
  235.   d_carky:=s*pomer/(pocet_carek*pomer+2pocet_carek-2);
  236.   d_mez:=s/(pocet_carek*pomer+2pocet_carek-2);
  237.   t:=0;
  238.   forever:
  239.     tz:=t; s:=0;
  240.     forever:
  241.       t:=t+krok;
  242.       s:=s+length((point t of p)-(point (t-krok) of p));
  243.       exitif (s>=d_carky) or (t>length(p));
  244.     endfor;
  245.     draw subpath(tz,t) of p;
  246.     s:=0;
  247.     forever:
  248.       t:=t+krok;
  249.       s:=s+length((point t of p)-(point (t-krok) of p));
  250.       exitif (s>=d_mez) or (t>length(p));
  251.     endfor;
  252.     drawdot point t of p;
  253.     s:=0;
  254.     forever:
  255.       t:=t+krok;
  256.       s:=s+length((point t of p)-(point (t-krok) of p));
  257.       exitif (s>=d_mez) or (t>length(p));
  258.     endfor;
  259.     exitif t>length(p);
  260.   endfor;
  261.   endgroup
  262. enddef;
  263.  
  264. def dashcyclepath(expr p,pocet_carek,pomer)=
  265.   begingroup
  266.   save t,tz,krok,s,d_carky,d_mez,poc;
  267.   krok:=0.001; t:=0; s:=0;        %% çárkovaná uzav⌐ená k⌐ivka
  268.   forever:                        %% pomer=délka_çarky/délka_mezery
  269.     t:=t+krok;          %% první a poslední çárka je dvakrát krat¿í
  270.     s:=s+length((point t of p)-(point (t-krok) of p));
  271.     exitif t>length(p);
  272.   endfor;
  273.   d_carky:=s*pomer/(pocet_carek*pomer+pocet_carek);
  274.   d_mez:=s/(pocet_carek*pomer+pocet_carek);
  275.   t:=0; poc:=0;
  276.   forever:
  277.     tz:=t; s:=0; poc:=poc+1;
  278.     forever:
  279.       t:=t+krok;
  280.       s:=s+length((point t of p)-(point (t-krok) of p));
  281.       if ((poc=1) or (poc=pocet_carek+1)):
  282.         exitif (s>=d_carky/2) or (t>length(p));
  283.       fi;
  284.       exitif s>=d_carky;
  285.     endfor;
  286.     draw subpath(tz,t) of p;
  287.     exitif t>length(p);
  288.     s:=0;
  289.     forever:
  290.       t:=t+krok;
  291.       s:=s+length((point t of p)-(point (t-krok) of p));
  292.       exitif (s>=d_mez) or (t>length(p));
  293.     endfor;
  294.     exitif t>length(p);
  295.   endfor;
  296.   endgroup
  297. enddef;
  298.  
  299. def dotpath(expr p,pocet_tecek)=      %% teçkovaná k⌐ivka
  300.   begingroup
  301.   save t,krok,s,d_mez;
  302.   krok:=0.001; t:=0; s:=0;
  303.   forever:
  304.     t:=t+krok;
  305.     s:=s+length((point t of p)-(point (t-krok) of p));
  306.     exitif t>length(p);
  307.   endfor;
  308.   d_mez:=s/(pocet_tecek-1);
  309.   t:=0;
  310.   drawdot(point t of p);
  311.   forever:
  312.     s:=0;
  313.     forever:
  314.       t:=t+krok;
  315.       s:=s+length((point t of p)-(point (t-krok) of p));
  316.       exitif (s>=d_mez) or (t>length(p));
  317.     endfor;
  318.     drawdot(point t of p);
  319.     exitif t>length(p);
  320.   endfor;
  321.   endgroup
  322. enddef;
  323.  
  324.