Graphics Reference
In-Depth Information
begin
real array a [0..] , b [0..];
boolean
fromRight;
if m = 0 then
begin
derivs[0] := ctrls[0];
return;
end ;
for i:=1 to m do
begin
a[i] := u - knots[i];
b[i] := knots[m+i] - u;
end ;
fromRight := (b[1] > a[m]);
if fromRight
then
begin
for i:=0 to m do derivs[i] := ctrls[i];
for j:=1 to m do
for i:=0 to m-j do
derivs[i] := (1.0/(a[i+j]+b[i+1]))*
(a[i+j]*derivs[i+1] + b[i+1]*derivs[i]);
for j:=1 to d do
for i:=d downto j do
derivs[i] := ((m-j+1)/b[i-j+1])*(derivs[i] - derivs[i-1]);
end
else
begin
for i:=0 to m do derivs[i] := ctrls[m-i];
for j:=1 to m do
for i:=0 to m-j do
derivs[i] := (1.0/(a[m-i]+b[m-j+1-i]))*
(b[m-j+1-i]*derivs[i+1] + a[m-i]*derivs[i]);
for j:=1 to d do
for i:=d downto j do
derivs[i] := (-(m-j+1)/a[m-i+j])* (derivs[i] - derivs[i-1]);
end
end ;
Algorithm 11.5.4.2. Continued
Search WWH ::




Custom Search