X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fnurbs-1.3.6%2Fbspeval.m;fp=octave_packages%2Fnurbs-1.3.6%2Fbspeval.m;h=5a3ed9e6a4261cc8a9a2b7875b227cfaa7204685;hp=0000000000000000000000000000000000000000;hb=c880e8788dfc484bf23ce13fa2787f2c6bca4863;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/nurbs-1.3.6/bspeval.m b/octave_packages/nurbs-1.3.6/bspeval.m new file mode 100644 index 0000000..5a3ed9e --- /dev/null +++ b/octave_packages/nurbs-1.3.6/bspeval.m @@ -0,0 +1,72 @@ +function p = bspeval(d,c,k,u) + +% BSPEVAL: Evaluate B-Spline at parametric points. +% +% Calling Sequence: +% +% p = bspeval(d,c,k,u) +% +% INPUT: +% +% d - Degree of the B-Spline. +% c - Control Points, matrix of size (dim,nc). +% k - Knot sequence, row vector of size nk. +% u - Parametric evaluation points, row vector of size nu. +% +% OUTPUT: +% +% p - Evaluated points, matrix of size (dim,nu) +% +% Copyright (C) 2000 Mark Spink, 2007 Daniel Claxton, 2010 C. de Falco +% +% 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 . + +nu = numel(u); +[mc,nc] = size(c); + % int bspeval(int d, double *c, int mc, int nc, double *k, int nk, double *u,int nu, double *p){ + % int ierr = 0; + % int i, s, tmp1, row, col; + % double tmp2; + % + % // Construct the control points + % double **ctrl = vec2mat(c,mc,nc); + % + % // Contruct the evaluated points +p = zeros(mc,nu); % double **pnt = vec2mat(p,mc,nu); + % + % // space for the basis functions +%N = zeros(d+1,1); % double *N = (double*) mxMalloc((d+1)*sizeof(double)); + % + % // for each parametric point i +%for col=1:nu % for (col = 0; col < nu; col++) { + % // find the span of u[col] + s = findspan(nc-1, d, u(:), k); % s = findspan(nc-1, d, u[col], k); + N = basisfun(s,u(:),d,k); % basisfun(s, u[col], d, k, N); + % + tmp1 = s - d + 1; % tmp1 = s - d; + %for row=1:mc % for (row = 0; row < mc; row++) { + p = zeros (mc, nu); % tmp2 = 0.0; + for i=0:d % for (i = 0; i <= d; i++) + p = p + repmat (N(:,i+1)', mc, 1).*c(:,tmp1+i); % tmp2 += N[i] * ctrl[tmp1+i][row]; + end % + %p(row,:) = tmp2; % pnt[col][row] = tmp2; + %end % } +%end % } + % + % mxFree(N); + % freevec2mat(pnt); + % freevec2mat(ctrl); + % + % return ierr; +end % }