-
Notifications
You must be signed in to change notification settings - Fork 2
/
bspderiv.m
58 lines (58 loc) · 2.82 KB
/
bspderiv.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function [dc,dk] = bspderiv(d,c,k)
%
% Function Name:
%
% bspdeval - Evaluate the control points and knot sequence of the derivative
% of a univariate B-Spline.
%
% Calling Sequence:
%
% [dc,dk] = bspderiv(d,c,k)
%
% Parameters:
%
% d : Degree of the B-Spline.
%
% c : Control Points, matrix of size (dim,nc).
%
% k : Knot sequence, row vector of size nk.
%
% dc : Control points of the derivative
%
% dk : Knot sequence of the derivative
%
% Description:
%
% Evaluate the derivative of univariate B-Spline, which is itself a B-Spline.
% This function provides an interface to a toolbox 'C' routine.
[mc,nc] = size(c);
nk = numel(k);
%
% int bspderiv(int d, double *c, int mc, int nc, double *k, int nk, double *dc,
% double *dk)
% {
% int ierr = 0;
% int i, j, tmp;
%
% // control points
% double **ctrl = vec2mat(c,mc,nc);
%
% // control points of the derivative
dc = zeros(mc,nc-1); % double **dctrl = vec2mat(dc,mc,nc-1);
%
for i=0:nc-2 % for (i = 0; i < nc-1; i++) {
tmp = d / (k(i+d+2) - k(i+2)); % tmp = d / (k[i+d+1] - k[i+1]);
for j=0:mc-1 % for (j = 0; j < mc; j++) {
dc(j+1,i+1) = tmp*(c(j+1,i+2) - c(j+1,i+1)); % dctrl[i][j] = tmp * (ctrl[i+1][j] - ctrl[i][j]);
end % }
end % }
%
dk = zeros(1,nk-2); % j = 0;
for i=1:nk-2 % for (i = 1; i < nk-1; i++)
dk(i) = k(i+1); % dk[j++] = k[i];
end %
% freevec2mat(dctrl);
% freevec2mat(ctrl);
%
% return ierr;
% }</pre>