资源简介
学习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个文件信息
相关资源
- 读取串口数据并画实时曲线的VC 程序
- 绘制曲线图软件
- 串口绘制曲线 将收到的数据进行曲线
- C 源码 画出wav文件声音数据的波形曲
- Douglas-Peucker 曲线离散化算法.rar
- 曲面拟合算法程序
- txt测井曲线转换las2.0(新编)
- 易语言椭圆曲线算法加密文件源码
- 通过3D打印样品发现NMR曲线的不同姿态
- 基于曲率信息由曲线到曲面的重建与
- 基于曲率的适应性移动最小二乘曲面
- l-CURVE曲线适用于正则化算法
- VMOS管理结构及输出特性曲线电路图
- 具有非共形物质的致密黎曼曲面上的
- 自由曲线曲面造型技术(朱心雄)
- 最小二乘法拟合曲线
- 基于蒙特卡洛生成电动汽车充电负荷
- 曲线.zip
- 曲线拟合控件
- SM2椭圆曲线算法软件.rar
- rlc串联电路谐振特性曲线
- 原生3次贝塞尔曲线算法地图
- 通用黑洞时空中受限制的Maximin曲面和
- 基于曲线回归方程的矿井主排水泵永
- 基于科赫雪花曲线激励装置的涡流传
- 贝塞尔曲线的unity3d实现
- 响应曲面试验优选维生素E琥珀酸酯工
- 细集料沥青混合料蠕变柔量主曲线绘
- η变形的AdS 5×S 5超弦的量子光谱
- 贝塞尔曲线效果图动态-娱乐
评论
共有 条评论