/[libvob]/libvob/lava/blob/dfillets.mp
ViewVC logotype

Diff of /libvob/lava/blob/dfillets.mp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by tjl, Mon May 26 16:09:21 2003 UTC revision 1.2 by tjl, Mon May 26 19:03:43 2003 UTC
# Line 23  vardef fcircle(suffix into)(expr r, ang, Line 23  vardef fcircle(suffix into)(expr r, ang,
23                  shifted into.c)                  shifted into.c)
24                  cutbefore ((0,0) -- into.c))                  cutbefore ((0,0) -- into.c))
25                  ;                  ;
26        into.eang := angle(into.c);
27  enddef;  enddef;
28    
29  def declfcircle(suffix s) =  def declfcircle(suffix s) =
# Line 33  enddef; Line 34  enddef;
34  vardef inters(expr p)(suffix s) =  vardef inters(expr p)(suffix s) =
35      save i;      save i;
36      pair i;      pair i;
37      i := p intersectiontimes s[0].pth;      i := p intersectiontimes s.pth;
38      if xpart(i) >= 0:      if xpart(i) >= 0:
39          point ypart(i) of s[0].pth          point ypart(i) of s.pth
40      else:      else:
41          i := p intersectiontimes s[1].pth;          (0,0)
         if xpart(i) >= 0:  
             point ypart(i) of s[1].pth  
         else:  
             (0,0)  
         fi  
42      fi      fi
43  enddef;  enddef;
44    
45  vardef interppnt(expr ang, r) =  vardef interppnt(expr ang, bang, bfact, r)(suffix a, b) =
46      save d, pd, ia, ib, fa, fb, fc;      save d, pd, ia, ib, fa, fb, fc;
47      pair d;      pair d;
     show ang, "FOO";  
48      d := dir(ang);      d := dir(ang);
49      path pd;      path pd, pb;
50      pd = (0,0) -- 10 * r * d;      pd = (0,0) -- 10 * r * d;
51        pb = (0,0) -- 10 * r * dir(bang);
52    
53      pair ia, ib;      pair ia, ib;
54      ia = inters(pd , a);      ia = inters(pd , a);
55      ib = inters(pd , b);      ib = inters(pb , b);
     show ia, ib;  
56      numeric fa, fb;      numeric fa, fb;
57      fa = abs(ia) - r;      fa = abs(ia) - r;
58      fb = abs(ib) - r;      fb = abs(ib) - r;
# Line 65  vardef interppnt(expr ang, r) = Line 60  vardef interppnt(expr ang, r) =
60      if fb < 0: fb := 0; fi      if fb < 0: fb := 0; fi
61    
62      numeric fc;      numeric fc;
63      fc = fa + fb + r;      show fa, fb, bfact;
64        fc := fa + bfact * fb + r;
65        show fc,d,"C";
66      d * fc      d * fc
67    
68  %    if abs(ia) > abs(ib):  %    if abs(ia) > abs(ib):
# Line 75  vardef interppnt(expr ang, r) = Line 72  vardef interppnt(expr ang, r) =
72  %    fi  %    fi
73  enddef;  enddef;
74    
75    vardef interpdraw(expr r)(expr aa)(suffix a)(expr ab)(suffix b) =
76        save pa;
77        if aa > ab: errmessage("Dir"); fi
78    
79        save interse;
80        pair interse;
81        interse := a.pth intersectionpoint b.pth;
82        
83    
84        path pa;
85        numeric fact;
86        if a.eang > ab:
87            show ab, aa, a.eang,"X";
88            fact := (ab - aa) / (a.eang - aa);
89            fact := fact * fact * fact;
90            show fact,"Y";
91    
92            save eange;
93            numeric eange;
94            eange := fact[a.eang, angle(interse)];
95    
96            pa :=
97            for ang = aa+1 step .1 until eange:
98                interppnt(ang, ang - (a.eang - ab), fact, r, a, b) --
99            endfor
100                interppnt(eange, eange - (a.eang - ab), fact, r, a, b);
101        else:
102            pa :=
103            for ang = aa+1 step .1 until angle(interse):
104                interppnt(ang, ang, 1, r, a, b) --
105            endfor
106                interppnt(angle(interse), angle(interse), 1, r, a, b);
107        fi
108        draw pa withpen pencircle scaled 3pt;
109    enddef;
110    
111  def diag(expr r, aa, ra, ta,  ab, rb, tb) =  def diag(expr r, aa, ra, ta,  ab, rb, tb) =
112            
113      save a, b;      save a, b;
# Line 88  def diag(expr r, aa, ra, ta,  ab, rb, tb Line 121  def diag(expr r, aa, ra, ta,  ab, rb, tb
121      draw circle scaled r;      draw circle scaled r;
122    
123  %    draw circle scaled a0.radius shifted a0.c;  %    draw circle scaled a0.radius shifted a0.c;
124    
125      draw a0.pth withpen pencircle scaled 1.5pt;      draw a0.pth withpen pencircle scaled 1.5pt;
126    
127      draw a1.pth ;      draw a1.pth ;
128      draw b0.pth ;      draw b0.pth ;
129    
130      draw b1.pth withpen pencircle scaled 1.5pt;      draw b1.pth withpen pencircle scaled 1.5pt;
131  %    draw circle scaled a1.radius shifted a1.c;  %    draw circle scaled a1.radius shifted a1.c;
132  %    draw circle scaled b0.radius shifted b0.c;  %    draw circle scaled b0.radius shifted b0.c;
133  %    draw circle scaled b1.radius shifted b1.c;  %    draw circle scaled b1.radius shifted b1.c;
134    
135      draw interppnt(aa+.8, r)      interpdraw(r, aa, a0, ab, b1);
136      for ang = aa+1 step .1 until ab - 1.1:  %    currentpicture := currentpicture yscaled -1;
         -- interppnt(ang, r)  
     endfor  
         withpen pencircle scaled 3pt;  
137    
138      % Blending curve:      % Blending curve:
139    
# Line 109  def diag(expr r, aa, ra, ta,  ab, rb, tb Line 142  def diag(expr r, aa, ra, ta,  ab, rb, tb
142  enddef;  enddef;
143    
144  beginfig(1);  beginfig(1);
145      diag(100, 90, 200, 5, 120, 150, 6);      for an = 100 step 8 until 155:
146            diag(100, 90, 200, 7, an, 150, 10);
147            currentpicture := currentpicture shifted (-200, 0);
148        endfor;
149  endfig;  endfig;
150    
151  end;  end;

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26