/usr/share/octave/packages/nurbs-1.3.7/bspderiv.m is in octave-nurbs 1.3.7-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 59 60 61 62 63 64 65 66 67 | function [dc,dk] = bspderiv(d,c,k)
% BSPDERIV: B-Spline derivative.
%
% MATLAB SYNTAX:
%
% [dc,dk] = bspderiv(d,c,k)
%
% INPUT:
%
% d - degree of the B-Spline
% c - control points double matrix(mc,nc)
% k - knot sequence double vector(nk)
%
% OUTPUT:
%
% dc - control points of the derivative double matrix(mc,nc)
% dk - knot sequence of the derivative double vector(nk)
%
% Modified version of Algorithm A3.3 from 'The NURBS BOOK' pg98.
%
% Copyright (C) 2000 Mark Spink, 2007 Daniel Claxton
%
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program. If not, see <http://www.gnu.org/licenses/>.
[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;
end % }
|