1 |
{ RCSid $Id$ } |
2 |
{ |
3 |
Uniform Rational Patch |
4 |
|
5 |
02Mar90 |
6 |
|
7 |
Define Px(i,j), Py(i,j), Pz(i,j) and W(i,j), nrows, ncols |
8 |
} |
9 |
{ default basis functions } |
10 |
br(a,b,c,d,s) = b3(a,b,c,d,s); |
11 |
bc(a,b,c,d,t) = b3(a,b,c,d,t); |
12 |
b3(a,b,c,d,p) = bezier(a,b,c,d,p); |
13 |
{ default patch interpolation } |
14 |
rint = interpolate; |
15 |
cint = interpolate; |
16 |
interpolate = 1; |
17 |
|
18 |
x(s,t) = patch(s,t,Px); |
19 |
y(s,t) = patch(s,t,Py); |
20 |
z(s,t) = patch(s,t,Pz); |
21 |
|
22 |
patch(s,t,p) = bc(P2(s,c0(t)+1,p), P2(s,c0(t)+2,p), |
23 |
P2(s,c0(t)+3,p), P2(s,c0(t)+4,p), cf(t)) / |
24 |
bc(W2(s,c0(t)+1), W2(s,c0(t)+2), |
25 |
W2(s,c0(t)+3), W2(s,c0(t)+4), cf(t)) ; |
26 |
|
27 |
P2(s,j,p) = br(W(1+r0(s),j)*p(1+r0(s),j), W(2+r0(s),j)*p(2+r0(s),j), |
28 |
W(3+r0(s),j)*p(3+r0(s),j), W(4+r0(s),j)*p(4+r0(s),j), rf(s)) ; |
29 |
|
30 |
W2(s,j) = br(W(1+r0(s),j), W(2+r0(s),j), W(3+r0(s),j), W(4+r0(s),j), rf(s)) ; |
31 |
|
32 |
r0(s) = rmult*floor(clamp(s)*npr); |
33 |
rf(s) = s*npr - floor(clamp(s)*npr); |
34 |
c0(t) = cmult*floor(clamp(t)*npc); |
35 |
cf(t) = t*npc - floor(clamp(t)*npc); |
36 |
|
37 |
rmult = if(rint, 4, 1); |
38 |
cmult = if(cint, 4, 1); |
39 |
npr = if(rint, nrows/4, nrows-3); |
40 |
npc = if(cint, ncols/4, ncols-3); |
41 |
|
42 |
clamp(p) = if(p, if(1-p, p, .9999999), .0000001); |