资源简介
学习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个文件信息
相关资源
- 论文:基于椭圆曲线离散对数问题的
- zw_Qt通过串口读单片机温度数据画动态
- SM2椭圆曲线公钥密码算法(完整)
- 1stopt软件破解版
- Echarts 图形柱图,饼图,曲线图等
- WinceChart曲线控件显示Demo
- 曲线拟合工具1stopt
- win32DrawLine
- 曲线拟合专家
- 椭圆曲线加密算法verilog代码强力推荐
- 案例22-双三次Bezier曲面-网格.zip
- 读取串口数据并画实时曲线成功改4
- 椭圆曲线算法入门
- vanFit绿色免安装版
- qt 写的绘制串口接收到数据的实时曲
- getdata-提取曲线图数据
- 非球面(光学自由曲面)加工技术进
- 椭圆曲线密码学导论
- jfreechar 实现生成柱状图,饼图,曲线
- TFTLCD实时绘制曲线曲线动态更新
- Qt通过串口读单片机温度数据画动态波
- 不对称缓和曲线中、边桩及放样计算
- Qt实现动态曲线图
- 基于tmc2660的步进电机S加减速曲线设计
- vc从txt中读取一些坐标值,绘制成曲线
- 步进电机加减速S型曲线控制
- loop细分曲面算法
- 锥齿轮和准双曲面齿轮术语
- 反算控制点拟合Nurbs曲线
- 2019中医药专题报告:中医药老字号的
评论
共有 条评论