view extra/nurbs/inst/numbasisfun.m @ 5664:81c8c68e393d octave-forge

improved help text
author cdf
date Tue, 19 May 2009 03:58:04 +0000
parents 6bc116f6bbc3
children 04d6b387025c
line wrap: on
line source

%% Copyright (C) 2009 Carlo 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 <http://www.gnu.org/licenses/>.

function B = numbasisfun (iv, uv, p, U)

% NUMBASISFUN:  List non-zero Basis functions for B-Spline in a given knot-span
%
% Calling Sequence:
% 
%   N = numbasisfun(i,u,p,U)
%   
%    INPUT:
%   
%      i - knot span  ( from FindSpan() )
%      u - parametric point
%      p - spline degree
%      U - knot sequence
%   
%    OUTPUT:
%   
%      N - Basis functions (numel(u)x(p+1))
%   

B = bsxfun (@(a, b) a+b,iv-p, (0:p).').';

%!test
%!  n = 3; 
%!  U = [0 0 0 1/2 1 1 1]; 
%!  p = 2; 
%!  u = linspace (0, 1, 10);  
%!  s = findspan (n, p, u, U); 
%!  Bref = [0   0   0   0   0   1   1   1   1   1
%!          1   1   1   1   1   2   2   2   2   2
%!          2   2   2   2   2   3   3   3   3   3];
%!  B = numbasisfun (s, u, p, U);
%!  assert (B, Bref)