]> mj.ucw.cz Git - ads2.git/blob - 6-geom/lib.mp
FFT: Vyhrabana z archivu
[ads2.git] / 6-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 path centersquare; centersquare := (-0.5,-0.5)--(0.5,-0.5)--(0.5,0.5)--(-0.5,0.5)--cycle;
49
50 def vertex(expr p) = p withpen pencircle scaled 4pt enddef;
51 def drawemptyvertex(expr p) = unfill fullcircle scaled 4pt shifted p; draw fullcircle scaled 4pt shifted p; enddef;
52 def drawendpointvertex(expr p) = draw vertex(p) withcolor red; draw fullcircle scaled 6pt shifted p; enddef;
53 def createpath(expr p) = shakepath(p, 0.015cm,0.1cm) enddef;
54 vardef shakepath(expr p,d,l) =
55         save r,b;
56         path r; r := point(arctime 0 of p) of p;
57         b := -1;
58         for i:=l step l until arclength(p):
59                 r := r--(point(arctime i of p) of p)+dir(angle(direction(arctime i of p) of p rotated 90))*d*b;
60                 b := -b;
61         endfor
62         r--point(arctime arclength(p) of p) of p
63 enddef;
64         
65 pen normalpen; normalpen := pencircle scaled 0.6pt;
66 pen boldpen; boldpen := pencircle scaled 1.5pt;
67 pen bolderpen; bolderpen := pencircle scaled 2pt;
68 def dotline = withdots scaled 0.82 withpen boldpen enddef;
69
70 vardef unclosedbubblec(expr p,c) =
71         bubblec((p..reverse p..cycle),c)
72 enddef; 
73
74 vardef bubblec(expr p,c) =
75         save r;
76         path r; r := (point(arctime 0 of p) of p)+dir(angle(direction(arctime 0 of p) of p rotated 90))*c;
77         for i:=0.01cm step 0.025cm until arclength(p):
78                 r := r..(point(arctime i of p) of p)+dir(angle(direction(arctime i of p) of p rotated 90))*c;
79         endfor
80         r..(point(arctime arclength(p) of p) of p)+dir(angle(direction(arctime arclength(p) of p) of p rotated 90))*c..cycle
81 enddef;
82
83 vardef bubble(expr p) = bubblec(p,0.12cm) enddef;
84 vardef unclosedbubble(expr p) = unclosedbubblec(p,0.12cm) enddef;