⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basisfun.m

📁 强大的nurbs的工具箱 nurbs曲线
💻 M
字号:
function N = basisfun(i,u,p,U)                
% BASISFUN  Basis function for B-Spline
% -------------------------------------------------------------------------
% ADAPTATION of BASISFUN from C Routine
% -------------------------------------------------------------------------
%
% Calling Sequence:
% 
%   N = basisfun(i,u,p,U)
%   
%    INPUT:
%   
%      i - knot span  ( from FindSpan() )
%      u - parametric point
%      p - spline degree
%      U - knot sequence
%   
%    OUTPUT:
%   
%      N - Basis functions vector[p+1]
%   
%    Algorithm A2.2 from 'The NURBS BOOK' pg70.
                                                
                                                  %   void basisfun(int i, double u, int p, double *U, double *N) {
                                                  %   int j,r;
                                                  %   double saved, temp;
i = i + 1;
                                                  %   // work space
left = zeros(p+1,1);                              %   double *left  = (double*) mxMalloc((p+1)*sizeof(double));
right = zeros(p+1,1);                             %   double *right = (double*) mxMalloc((p+1)*sizeof(double));
                                               
N(1) = 1;                                         %   N[0] = 1.0;
for j=1:p                                         %   for (j = 1; j <= p; j++) {
    left(j+1) = u - U(i+1-j);                     %   left[j]  = u - U[i+1-j];
    right(j+1) = U(i+j) - u;                      %   right[j] = U[i+j] - u;
    saved = 0;                                    %   saved = 0.0;

    for r=0:j-1                                   %   for (r = 0; r < j; r++) {
        temp = N(r+1)/(right(r+2) + left(j-r+1)); %   temp = N[r] / (right[r+1] + left[j-r]);
        N(r+1) = saved + right(r+2)*temp;         %   N[r] = saved + right[r+1] * temp;
        saved = left(j-r+1)*temp;                 %   saved = left[j-r] * temp;
    end                                           %   }

    N(j+1) = saved;                               %   N[j] = saved;
end                                               %   }
  
                                                  %   mxFree(left);
                                                  %   mxFree(right);
                                                  %   }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -