Mercurial > forge
view extra/nurbs/inst/bspderiv.m @ 5664:81c8c68e393d octave-forge
improved help text
author | cdf |
---|---|
date | Tue, 19 May 2009 03:58:04 +0000 |
parents | 090568b3a995 |
children | 97806581afd6 |
line wrap: on
line source
%% Copyright (C) 2003 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 2 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/>. 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. [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; % }