X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fnurbs-1.3.6%2Fprivate%2Fonebasisfun__.m;fp=octave_packages%2Fnurbs-1.3.6%2Fprivate%2Fonebasisfun__.m;h=bbd17645180719cda92a306f7857168aa94db1a5;hp=0000000000000000000000000000000000000000;hb=c880e8788dfc484bf23ce13fa2787f2c6bca4863;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/nurbs-1.3.6/private/onebasisfun__.m b/octave_packages/nurbs-1.3.6/private/onebasisfun__.m new file mode 100644 index 0000000..bbd1764 --- /dev/null +++ b/octave_packages/nurbs-1.3.6/private/onebasisfun__.m @@ -0,0 +1,56 @@ +function Nip = onebasisfun__ (u, p, U) + +% __ONEBASISFUN__: Undocumented internal function +% +% Adapted from Algorithm A2.4 from 'The NURBS BOOK' pg74. +% +% Copyright (C) 2009 Carlo de Falco +% Copyright (C) 2012 Rafael Vazquez +% This software comes with ABSOLUTELY NO WARRANTY; see the file +% COPYING for details. This is free software, and you are welcome +% to distribute it under the conditions laid out in COPYING. + + Nip = zeros (size (u)); + N = zeros (p+1, 1); + + for ii = 1:numel(u) + if ((u(ii) == U(1)) && (U(1) == U(end-1)) || ... + (u(ii) == U(end)) && (U(end) == U(2))) + Nip(ii) = 1; + continue + end + if (~ any (U <= u(ii))) || (~ any (U > u(ii))) + continue; + end + for jj = 1:p+1 % Initialize zero-th degree functions + if (u(ii) > U(jj) && u(ii) < U(jj+1)) + N(jj) = 1; + else + N(jj) = 0; + end + end + for k = 1:p + if (N(1) == 0) + saved = 0; + else + saved = (u(ii) - U(1))*N(1) / (U(k+1)-U(1)); + end + + for jj = 1:p-k+1 + Uleft = U(1+jj); + Uright = U(1+jj+k); + if (N(jj+1) == 0) + N(jj) = saved; + saved = 0; + else + temp = N(jj+1)/(Uright-Uleft); + N(jj) = saved + (Uright - u(ii))*temp; + saved = (u(ii) - Uleft)*temp; + end + end + end + Nip(ii) = N(1); + end + + +end