]> mj.ucw.cz Git - ads2.git/blob - 7-geom/lib.mp
Doplnena 2. geometricka prednaska.
[ads2.git] / 7-geom / lib.mp
1 % implementation of figure naming and figure transparency
2 string name,tag; name := ""; tag := "";
3 def updatefigname =
4         if tag="": filenametemplate (name & "%c.eps");
5         else: filenametemplate (name & "%c_" & tag & ".eps");
6         fi;
7 enddef;
8         
9 def figname(expr n) = name := n; updatefigname; enddef;
10 def figtag(expr t) = tag := t; updatefigname; enddef;
11
12 picture transparent_picture;
13 color transparent_color; transparent_color := 0.9white;
14 def drawtransparent(expr num) =
15         transparent_picture := currentpicture;
16 endfig;
17
18 if tag="": filenametemplate (name & "%c_transparent.eps");
19 else: filenametemplate (name & "%c_" & tag & "_transparent.eps");
20 fi;
21 beginfig(num);
22         draw transparent_picture withcolor transparent_color;
23 endfig;
24
25 updatefigname;
26 enddef;
27
28 def from(expr p,d,len) =
29         p+dir(d)*len
30 enddef;
31
32 def dirs(expr p,d,len) =
33         p--from(p,d,len)
34 enddef;
35
36 def drawvertices(expr s,n) =
37         for i:=s upto n:
38                 draw vertex(PQ[i]);
39         endfor
40 enddef;
41
42 def drawfvertices(expr s,n,flags) =
43         for i:=s upto n:
44                 draw vertex(PQ[i]) flags;
45         endfor
46 enddef;
47
48 def vertex(expr p) = p withpen pencircle scaled 4pt enddef;
49 def drawemptyvertex(expr p) = unfill fullcircle scaled 4pt shifted p; draw fullcircle scaled 4pt shifted p; enddef;
50 def drawendpointvertex(expr p) = draw vertex(p) withcolor red; draw fullcircle scaled 6pt shifted p; enddef;
51 def createpath(expr p) = shakepath(p, 0.015cm,0.1cm) enddef;
52 vardef shakepath(expr p,d,l) =
53         save r,b;
54         path r; r := point(arctime 0 of p) of p;
55         b := -1;
56         for i:=l step l until arclength(p):
57                 r := r--(point(arctime i of p) of p)+dir(angle(direction(arctime i of p) of p rotated 90))*d*b;
58                 b := -b;
59         endfor
60         r--point(arctime arclength(p) of p) of p
61 enddef;
62         
63 pen normalpen; normalpen := pencircle scaled 0.6pt;
64 pen boldpen; boldpen := pencircle scaled 1.5pt;
65 pen bolderpen; bolderpen := pencircle scaled 2pt;
66 def dotline = withdots scaled 0.82 withpen boldpen enddef;
67
68 vardef unclosedbubblec(expr p,c) =
69         bubblec((p..reverse p..cycle),c)
70 enddef; 
71
72 vardef bubblec(expr p,c) =
73         save r;
74         path r; r := (point(arctime 0 of p) of p)+dir(angle(direction(arctime 0 of p) of p rotated 90))*c;
75         for i:=0.01cm step 0.025cm until arclength(p):
76                 r := r..(point(arctime i of p) of p)+dir(angle(direction(arctime i of p) of p rotated 90))*c;
77         endfor
78         r..(point(arctime arclength(p) of p) of p)+dir(angle(direction(arctime arclength(p) of p) of p rotated 90))*c..cycle
79 enddef;
80
81 vardef bubble(expr p) = bubblec(p,0.12cm) enddef;
82 vardef unclosedbubble(expr p) = unclosedbubblec(p,0.12cm) enddef;