B样条方法在表示与设计自由型曲线曲面形状时显示了强大的威力,然而

在表示与设计初等曲线曲面时时却遇到了麻烦。因为B样条曲线包括其特例的

Bezier曲线都不能精确表示出抛物线外的二次曲线,B样条曲面包括其特例的

Bezier曲面都不能精确表示出抛物面外的二次曲面,而只能给出近似表示。

提出NURBS方法,即非均匀有理B样条方法主要是为了找到与描述自由型曲线

曲面的B样条方法既相统一、又能精确表示二次曲线弧与二次曲面的数学方法。

NURBS方法的主要优点:

(1)既为标准解析形状(即前面提到的初等曲线曲面),又为自由型曲线

曲面的精确表示与设计提供了一个公共的数学形式。

(2)修改控制顶点和权因子,为各种形状设计提供了充分的灵活性。

(3)具有明显的几何解释和强有力的几何配套技术(包括节点插入、细

分、升阶等)。

(4)对几何变换和投影变换具有不变性。

(5)非有理B样条、有理与非有理Bezier方法是其特例。

不过,目前应用NURBS中还有一些难以解决的问题:

(1)比传统的曲线曲面定义方法需要更多的存储空间,如空间圆需7个参

数(圆心、半径、法矢),而NURBS定义空间圆需38个参数。

(2)权因子选择不当会引起畸变。

(3)对搭接、重叠形状的处理很麻烦。

(4)反求曲线曲面上点的参数值的算法,存在数值不稳定问题。

3.4.1 NURBS曲线的定义

NURBS曲线是由分段有理B样条多项式基函数定义的:

其中,Ri,k(t)(i=0,1,…,n)称为k阶有理基函数,Ni,k(t)是k 阶B样条

基函数,Pi(i=0,1,…,n)是特征多边形控制顶点位置矢量;w i是与Pi对应

的权因子,首末权因子w 0,w n>0,其余w i3 0,以防止分母为零及保留凸包

性质、曲线不因权因子而退化为一点;节点矢量为T=[t0, t1, … , ti, …,

点tn+k],节个数是m=n+k+1(n为控制项的点数,k为B样条基函数的阶数)。

对于非周期NURBS曲线,常取两端节点的重复度为k,即

有:

,在大多数实际应用中,a =0,

b =1。P(t)在

区间上是一个k-1次有理多项式,P(t)在整条曲线上

具有k-2阶连续性,对于三次B样条基函数,具有C2连续性。当n=k-1时,k阶

NURBS曲线变成k-1次有理Bezier曲线,k阶NURBS曲线的节点矢量中两端节点的

成节点重复度取k+1就使得曲线具有同次有理Bezier曲线的端点几何性质。

Ri,k(t)具有k阶B样条基函数类似的性质:

(1)局部支承性:Ri,k(t)=0,t? [ti, ti+k];

(2)权性:

(3)可微性:如果分母不为零,在节点区间内是无限次连续可微的,在

节点处 (k-1-r)次连续可导,r是该节点的重复度。

(4)若w i=0,则Ri,k(t)=0;

(5)若w i=+¥ ,则Ri,k(t)=1;

(6)若w j=+¥ ,且j1 i,则Ri,k(t)=0;

(7)若w j=1,j=0,1,…,n, 则是B样条基函数;若w

jj=1,=0,1,…,n,且,Bi,k(t)是

Bernstein基函数。

Ri,k(t)与Ni,k(t)具有类似的性质,导致NURBS曲线与B样条曲线也具有类

似的几何性质:

(1)局部性质。k阶NURBS曲线上参数为

的一点

至多与k个控制顶点Pi及权因子

有关,与其它顶

点和权因子无关;另一方面,若移动k次NURBS曲线的一个控制顶点Pi或改变所

联系的权因子仅仅影响定义在区间

上那部分曲线的形状

(2)变差减小性质。

(3)凸包性。定义在非零节点区间上曲线段

位于定义它的k+1个控制顶点的凸包内。整条NURBS曲线位于所

有定义各曲线段的控制顶点的凸包的并集内。所有权因子的非负性,保证了

凸包性质的成立。

(4)在仿射与透射变换下的不变性。

(5)在曲线定义域内有与有理基函数同样的可微性。

(6)如果某个权因子

为零,那么相应控制顶点

对曲线没有影响。

(7)若

则当时,

(8)非有理与有理Bezier曲线和非有理B样条曲线是NURBS曲线的特殊情

况 。

3.4.2 齐次坐标表示

为了便于讨论,我们考虑平面NURBS曲线的情况。图3.1.34所示,如果给

一组控制顶点

及对应的权因子

则在齐次坐标系xyw中的控制顶点为

齐次坐标下的k阶非有理B样条曲线可表示为:

若以坐标原点为投影中心,则得到平面曲线:

三维空间的NURBS曲线可以类似地定义。即对于给定的一组控制顶点

及对应的权因子

,则有相应

带权控制点

,定义了一条四维的

k阶非有理B样条曲线

,然后,取它在第四坐标

的超平面上的中心

投影,即得三维空间里定义的一条k阶NURBS曲线

。这不仅包含了明确的

几何意义,也说明,非有理B样条的算法可以推广到NURBS曲线,只不过是在

齐次坐标下进行。

3.4.3 权因子的几何意义

由于NURBS曲线权因子w i只影响参数区间定义在区间

上的那部分曲线的形状,因此,我们只考察整条曲线的这一部分。如果固定曲线的参数t,而使变化,则NURBS曲线方程变成以为参数的直线方程,即

NURBS曲线上t值相同的点都位于同一直线上,如图3.1.35所示。我们把曲线与

有理基函数的记号用用如下包含其权因子为变量的记号替代。因当时

的,故该直线通过控制顶点

分别是

对应曲线上的点,即

a =Ri,k(t; w i=1 ),b = Ri,k(u)

N,Bi可表示为:

用a 、b 可得到下述比例关系:

上式是(Pi,Bi,N,B)四点的交比,由此式可知:

(1)若w i增大活减小,则b 也增大或减小,所以曲线被拉向或推离开

Pi点;

(2)若w j增大或减小,曲线被推离或拉向Pj(j1 i)。

3.4.4 圆锥曲线的NURBS表示

若取节点向量为

,则NURBS曲线退化为二次Bezier曲线,

可以证明,这是圆锥曲线弧方程,

称为形状因子,

的值

确定了圆锥曲线的类型。

时,上式是抛物线弧,

时,

上式是双曲线弧,

时,上式是椭圆弧。且

时,上式

退化为一对直线段

时,上式退化为连接

两点的直线段,如图3.1.36所示。

3.4.5 NURBS曲线的修改

NURBS曲线的修改有多种方式,常用的方法有修改权因子、控制点和反插

节点。

1.修改权因子

权因子的作用是:当保持控制顶点和其它权因子不变,减少或增加某权因

子时,曲线被推离或拉向相应顶点。假定已给k阶(k-1)次NURBS曲线上参数

为t的一点S,欲将曲线在该点拉向或推离控制顶点

一个距离d,以得到新点

,可由重新确定相应的权因子

使之改变为

来达到,如图3.1.37所示。

其中,

表示

两点间的距离,d有正负之分,若

间,即曲线被拉向顶点和

,d为正,反之为负。

修改过程是拾取曲线上一点,并确定该点的参数,再拾取

控制多边形的一个顶点,它是k+1个控制顶点中的一个,即

,便可算出两点间的距离d。若在直线段上拾取一个点

,就能确定替代老权因子的新权因子,修改后的曲线将通过点。

2.修改控制顶点

若给定曲线上参数为的一点S,方向矢量V和距离d,计算控制顶点

新位置

,以使曲线上S点沿V移动距离d到新位置可表示为:

于是:

由此可得新控制顶点:

3.反插节点

给定控制多边形顶点与权因子及节点矢量

,就定义了一条k阶NURBS曲线。现欲在该多边形的

的边上选取一点,使得点成为一个新的控制顶点,这就是所谓反插节点。

点可按有理线性插值给出:

于是:

所以

这就是使得成为一个新控制顶点而要插入的新节点。

当插入新节点使成为新控制顶点的同时,将有k-2个老控

制顶点被包括在内的新控制顶点所替代,如图3.1.38所示。

3.4.6 非均匀有理B样条(NURBS)曲面

1.NURBS曲面的定义

由双参数变量分段有理多项式定义的NURBS曲面是:

式中

是矩形域上特征网格控制点列,

是相应控制点的权因子,规定

四角点处用正权因子,即

,其余

是p阶和q阶的B样条基函数,

是双变量有理基函数:

节点矢量按de Boor递推

公式决定,通常具有下面的形式:

p个 q个

p个 q个

2.NURBS曲面的性质

有理双变量基函数与非有理B样条基函数相类似的性质:

(1)局部支承性质:当或

(2)权性:

(3)可微性:在每个子矩形域内所有偏导数存在,在重复度为r的u节点

处沿u向是p-r-1次连续可微,在重复度为r的v节点处沿v向是q-r-1次连续可

微;

(4)极值:若p,q>1,恒有一个极大值存在;

(5)是双变量B样条基函数的推广。

NURBS曲面与非有理B样条曲面也有相类似的几何性质,权因子的几何意义

及修改、控制顶点的修改等也与NURBS曲线类似,这里不在赘述。

我们已经知道,计算机中表示形体,通常用线框、表面和实体三种模

型。线框模型和表面模型保存的三维形体信息都不完整,只有实体模型才能

够完整地、无歧义地表示三维形体。前面我们已经介绍了曲线曲面常用的的

表示形式及其理论基础,从本小节开始,我们介绍实体造型技术的有关问题,

主要包括形体在计算机内的表示、分类求交算法和典型的实体造型系统。

java nurbs几何库_NURBS曲线与曲面相关推荐

  1. java nurbs几何库_OpenGL超级宝典笔记——NURBS与曲面细分

    NURBS 贝塞尔曲线的缺点是当我们增加很多控制点的时候,曲线变得不可控,其连续性会变差差.如果控制点很多(高阶曲线),当我们调整一个控制点的位置,对整个曲线的影响是很大的.要获得更高级的控制,可以使 ...

  2. OpenCASCADE绘制测试线束:几何命令之曲线和曲面修改

    OpenCASCADE绘制测试线束:几何命令之曲线和曲面修改 曲线和曲面修改 reverse, ureverse, vreverse exchuv segment, segsur incudeg, i ...

  3. 几何Geometry(2)(曲线和曲面)(笔记)

    文章目录 前言 四.曲线(Curves) 贝塞尔曲线(Bezier Curves) 贝塞尔曲线的德卡斯特里奥算法(Bezier Curves - de Casteljau Algorithm) 三次贝 ...

  4. 11、计算机图形学——几何(贝塞尔曲线与曲面)

    一.贝塞尔曲线 1.1.简介 下图中蓝色的线就是贝塞尔曲线,每条贝塞尔曲线都有控制点(下图中有四个),贝塞尔曲线必须经过第1个和最后一个控制点,并且需要和第起止控制点相切 1.2.如何得到贝塞尔曲线 ...

  5. GAMES101现代计算机图形学入门——几何表示之曲线与曲面

    此为个人学习笔记,总结内容来源于网络各个平台,如有错误欢迎指摘 几何表示 曲线与曲面 本节附加资料: Making things with Maths (acko.net) 游戏开发技术杂谈2:理解插 ...

  6. 计算机图形学【GAMES-101】5、几何(距离函数SDF、点云、贝塞尔曲线、曲面细分、曲面简化)

    快速跳转: 1.矩阵变换原理Transform(旋转.位移.缩放.正交投影.透视投影) 2.光栅化(反走样.傅里叶变换.卷积) 3.着色计算(深度缓存.着色模型.着色频率) 4.纹理映射(重心坐标插值 ...

  7. OpenCASCADE:Modeling Algorithms模块几何工具之来自约束的曲线和曲面

    OpenCASCADE:Modeling Algorithms模块几何工具之来自约束的曲线和曲面 来自约束的曲线和曲面 平滑和最小变化的二维曲线 板条曲线 最小变化曲线 规则曲面 贝塞尔曲面的创建 创 ...

  8. 计算机图形学-曲线和曲面

    8.1基本概念 8.2三次样条 8.3Bezier曲线曲面 8.4B样条曲线曲面 8.5有理样条曲线曲面 一.曲线曲面数学描述的发展 弗格森双三次曲面片 (形状控制与连接问题) 孔斯双三次曲面片 (形 ...

  9. Java第三方工具库/包汇总

    一.科学计算或矩阵运算库 科学计算包: JMathLib是一个用于计算复杂数学表达式并能够图形化显示计算结果的Java开源类库.它是Matlab.Octave.FreeMat.Scilab的一个克隆, ...

最新文章

  1. c语言作业算术表达式求值,算术表达式求值演示(C语言版)
  2. 手把手玩转win8开发系列课程(11)
  3. 风速风量管径计算软件_集气罩的类型与风量计算,看完果断收藏了!
  4. SHELL脚本取系统当前年月日问题 (去0)
  5. HDU-1541 Stars 树状数组
  6. c语言中说取消标识符是,2019年全国计算机二级C语言考试考点解析(3)
  7. autojs怎么post协议_autojs QQ群post签到(五)
  8. 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算
  9. 转, C# 如何在MVC3中取消备用控制器的选择
  10. 漫画:如何给女朋友解释什么是策略模式?
  11. 数据库 -- 单表的数据查询
  12. Matplotlib-自定义虚线样式
  13. faker造假数据的使用
  14. 大变局时代的搜索引擎走向何方?
  15. Android 分享功能之 微信 图片分享
  16. python中search、findall、finditer的区别
  17. leetcode-Database-577|员工奖金
  18. 跟我学aspectj之十三 ----- AspectJ其他功能介绍
  19. 在coursera上旁听深度学习课程
  20. Java实现简单的扫雷小程序

热门文章

  1. python导入类属性不存在_为什么我会得到一个错误:我的类中不存在该属性?
  2. js获取对象数组中指定属性值对象_3分钟学会操作JavaScript内置对象,快来试试吧...
  3. bdf比特数字基金_第四届世界数字经济大会,比特元BTY作为协办方参与
  4. 【连载】如何掌握openGauss数据库核心技术?秘诀三:拿捏存储技术(7)
  5. 案例:控制文件序列号满故障处理和分析
  6. 嘉年华回顾丨Eygle带你领略数据库技术和生态的发展演进
  7. 连载一:Oracle迁移文档大全
  8. Scrum Master们,难道每天都在摸鱼?
  9. 云小课|细数那些VMware虚拟机的恢复招式
  10. 在openGauss上做开发?这个大赛拿出30万寻找开源的你