资源简介

学习NURBS时写的NURBS曲线曲面的库-NurbsLib,用它就可以画NURBS曲线和曲面了。里面的源代码参照了The NURBS Book

资源截图

代码片段和文件信息

/************************************************************************/
/* added by qiaozhifeng 2008.03.20  at Tianjin University Build 10th room 110
/* More:
/*   http://blog.csdn.net/qiaozhifeng  
/*
/************************************************************************/
// NurbsCurve.cpp : implementation file
//
#include “stdafx.h“
#include “NurbsCurve.h“
/////////////////////////////////////////////////////////////////////////////
// NurbsCurve
CNurbsCurve::CNurbsCurve()
{
BinomialCoef(11Coefficients);// 计算二项式系数默认只求一次的。
}
CNurbsCurve::CNurbsCurve(int r)
//声明求导的次数,便于统一计算,加快运算速度!
{
BinomialCoef(r+1r+1Coefficients);// 计算二项式系数
}


CNurbsCurve::~CNurbsCurve()
{
}
double CNurbsCurve::basisFun( double uint kMatrix& Knot) const
{
/*b样条基函数求解
功能:给定基函数求解所需的k+2个节点,及对应的u值,求出基函数n的值
k:基函数次数;
u :参数值
Knot:节点矢量,给定点数应该为k+2
*/

double Nip ;
  double savedUleftUrighttemp ;
  
  //if(p<1)
   // p = deg_ ;

  //if((i==0 && u == U(0)) ||
    // (i == U.n()-p-2 && u==U(U.n()-1))){
   // Nip = 1.0 ;
   // return Nip ;
  //}
  if(k==0&&(u>=Knot(00)&&u<=Knot(0k+1)))
  {
  Nip = 1.0 ;
  return Nip ;
  }

  if(u=Knot(0k+1))
  {
    Nip = 0.0 ;
    return Nip;
  }
  Matrix N;
  //T* N = (T*) alloca((p+1)*sizeof(T)) ; // Vector N(0p+1) ;
  N.SetSize(1k+1);

  int j ;
  for(j=k;j>=0;--j){
    if(u>=Knot(0j) && u      N(0j) = 1.0 ;
    else
      N(0j) = 0.0 ;
  }
  for(int r=1; r<=k ; r++){
    if(N(00) == 0.0)
      saved = 0.0 ;
    else
      saved = ( (u-Knot(00))*N(00))/(Knot(0r)-Knot(00)) ;
    for(j=0;j      Uleft = Knot(01+j) ;
      Uright = Knot(01+j+r) ;
      if(N(0j+1)==0.0){
N(0j) = saved ;
saved = 0.0 ;
      }
      else {
   temp=(Uright-Uleft);
   if(temp!=0)                   //对temp=0进行特殊处理
     {
   temp = N(0j+1)/temp ;
   }
N(0j) = saved+(Uright-u)*temp ;
saved = (u-Uleft)*temp ;
      }
    }
  }
  Nip = N(00) ;

  return Nip ;  
}
void CNurbsCurve::basisFuns(double uint kMatrix& KnotMatrix& N) const
 {
/*一系列的b样条基函数求解,可以节省大量运算!
功能:给定基函数求解所需的k*2个节点,及对应的u值,求出各阶的基函数的值(除了零次的)
k:基函数次数;
u :参数值
Knot:节点矢量,给定点数应该为k*2
N: 返回各阶基函数的值,基函数个数应该为k+1(除了零次的)。
除了边缘位置的u,u的位置应该在Knot(0k-1)与Knot(0k)之间!
优点:可一次性的求出Knot(0k-1)与Knot(0k)区间的所有基函数在Knot(0k-1)到Knot(0k)间的值
*/
Matrix leftright;
N.SetSize(1k+1);
left.SetSize(1k+1);
right.SetSize(1k+1);
N(00)=1.0;
double tempsaved ;
for(int j=1; j<= k ; j++){
    left(0j) = u-Knot(0k-j) ;
    right(0j) = Knot(0k-1+j)-u ;
    saved = 0.0 ;
    for(int r=0 ; r   temp=(right(0r+1)+left(0j-r));
   if(temp!=0)                   //对temp==0进行特殊处理
     {
   temp = N(0r)/temp ;
   }
      N(0r) = saved+right(0r+1) * temp ;
      saved = left(0j-r) * temp ;
    }
    N(0j) = saved ;
  }
}
bool CNurbsCurve::ComputeBsplinePoint(int dimint kMatrix& ControlPointMatrix& Knotdouble u

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        781  2008-06-01 14:29  NurbsSurface\StdAfx.h

     文件        210  2008-06-01 14:29  NurbsSurface\StdAfx.cpp

     文件       1491  2008-06-01 14:29  NurbsSurface\Readme.txt

     文件        549  2008-06-01 14:29  NurbsSurface\NurbsSurface.dsw

     文件      74752  2008-06-19 10:44  NurbsSurface\NurbsSurface.ncb

     文件       6721  2008-06-07 10:13  NurbsSurface\NurbsCurve.h

     文件        260  2008-06-19 10:44  NurbsSurface\NurbsSurface.plg

     文件       3464  2008-06-01 14:32  NurbsSurface\NurbsSurface.dsp

     文件     210402  2008-06-01 14:31  NurbsSurface\NurbsSurface0.lib

     文件       4547  2008-06-19 10:29  NurbsSurface\复件 NurbsSurface.h

     文件      30593  2008-06-17 12:50  NurbsSurface\matrix.h

     文件      91934  2008-06-19 10:44  NurbsSurface\Release\NurbsSurface.lib

     文件    3318716  2008-06-19 10:44  NurbsSurface\Release\NurbsSurface.pch

     文件      50176  2008-06-19 10:44  NurbsSurface\Release\vc60.idb

     文件        566  2008-06-19 10:44  NurbsSurface\Release\StdAfx.obj

     文件      85012  2008-06-19 10:44  NurbsSurface\Release\NurbsSurface.obj

     文件     205662  2008-06-07 10:32  NurbsSurface\Debug\NurbsSurface.lib

     文件       8618  2008-06-19 10:29  NurbsSurface\NurbsSurface.h

     文件      25485  2008-06-07 10:49  NurbsSurface\NurbsSurface.cpp

     文件      86016  2008-06-19 10:44  NurbsSurface\NurbsSurface.opt

     文件        781  2008-06-01 14:17  NurbsCurve\StdAfx.h

     文件        208  2008-06-01 14:17  NurbsCurve\StdAfx.cpp

     文件       1479  2008-06-01 14:17  NurbsCurve\Readme.txt

     文件        545  2008-06-01 14:17  NurbsCurve\NurbsCurve.dsw

     文件      50176  2008-06-19 10:43  NurbsCurve\NurbsCurve.ncb

     文件       3312  2008-06-01 14:17  NurbsCurve\NurbsCurve.dsp

     文件       1264  2008-06-19 10:43  NurbsCurve\NurbsCurve.plg

     文件      30593  2008-06-17 12:50  NurbsCurve\matrix.h

     文件     173882  2008-06-01 14:18  NurbsCurve\NurbsCurve0.lib

     文件       3133  2008-06-01 14:20  NurbsCurve\复件 NurbsCurve.h

............此处省略18个文件信息

评论

共有 条评论