文章目录

  • 1. 定义
  • 2. 性质
    • 2.1 NURBS基函数的性质
    • 2.2 NURBS曲线的性质
  • 3. 修改权重
  • 4. 相关算法
    • 4.1 节点插入:单点插入
    • 4.2 De Boor's Algorithm
  • 5. Rational Bézier Curves
  • 6. Rational Bézier Curves: Conic Sections
  • 7. Circular Arcs and Circles

1. 定义

NURBS(Non Uniform Rational B-spline)曲线通常称为非均匀有理B样条曲线,其数学定义如下:

其中,

Ni,p(u)N_{i,p}(u)Ni,p​(u)为ppp次B样条基函数,P0,P1,...,PnP_0, P_1, ..., P_nP0​,P1​,...,Pn​为控制点, U = { u0,u1,...,umu_0, u_1, ..., u_mu0​,u1​,...,um​ }为节点向量, w0,w1,..,wnw_0, w_1, .., w_nw0​,w1​,..,wn​代表权重.

推导过程:





容易得到以下结论:

  1. 如果所有权重均等于1,NURBS 曲线退化成B样条曲线.
  2. NURBS 曲线是有理曲线.

2. 性质

2.1 NURBS基函数的性质

  1. Ri,p(u)R_{i,p}(u)Ri,p​(u)是关于uuu的ppp次有理函数.
  2. 如果u∉[ui,ui+p+1)u∉[u_i,u_{i+p+1})u∈/​[ui​,ui+p+1​),则Ri,p(u)=0R_{i,p}(u)=0Ri,p​(u)=0
  3. 当u∈[ui,ui+1)u∈[u_i,u_{i+1})u∈[ui​,ui+1​)时,至多存在p+1p+1p+1个ppp次基函数,即Ri−p,p(u),Ri−p+1,p(u),...,Ri,p(u)R_{i-p,p}(u), R_{i-p+1,p}(u), ..., R_{i,p}(u)Ri−p,p​(u),Ri−p+1,p​(u),...,Ri,p​(u)非0.
  4. 当u∈[ui,ui+1)u∈[u_i,u_{i+1})u∈[ui​,ui+1​)时,∑j=i−piRj,p(u)=0\sum\limits_{j=i-p}^{i}R_{j,p}(u)=0j=i−p∑i​Rj,p​(u)=0.
  5. 如果节点数量为m+1m+1m+1,B样条基函数的次数为ppp,个数为n+1n+1n+1,则m=n+1+pm=n+1+pm=n+1+p.
  6. 基函数Ri,p(u)R_{i,p}(u)Ri,p​(u)在kkk重节点uuu处Cp−kC^{p-k}Cp−k连续.
  7. 如果对所有的iii,均有wi=cw_i=cwi​=c,其中ccc是一个非0常量,则 Ri,p(u)=Ni,p(u)R_{i,p}(u) = N_{i,p}(u)Ri,p​(u)=Ni,p​(u).

2.2 NURBS曲线的性质

  1. NURBS曲线是次数为ppp的分段有理曲线组合.
  2. m=n+p+1m = n + p + 1m=n+p+1.
  3. Clamped NURBS曲线经过p0p_0p0​,pnp_npn​两个控制点.
  4. 强凸包性:
    当u∈[ui,ui+1)u∈[u_i,u_{i+1})u∈[ui​,ui+1​)时,曲线段C(u)C(u)C(u) 在由控制点Pi−p,Pi−p+1,...,PiP_{i-p}, P_{i-p+1}, ..., P_iPi−p​,Pi−p+1​,...,Pi​组成的凸包内.
  5. 局部修改特性:
    改变控制点PiP_iPi​的位置,只会影响处在[ui,ui+p+1)[u_i,u_{i+p+1})[ui​,ui+p+1​)区间内的曲线段C(u)C(u)C(u).
  6. C(u)C(u)C(u)在kkk重节点uuu处Cp−kC^{p-k}Cp−k连续.
  7. 变差递减性.
  8. B样条曲线和贝塞尔曲线是NURBS曲线的特例.
  9. 投影不变性.

3. 修改权重

增加(或,减少)权重值会将曲线拉向(或,远离)控制点PiP_iPi​。当wiw_iwi​值无穷大时,曲线通过控制点PiP_iPi​,当wiw_iwi​为零时,控制点PiP_iPi​对曲线无影响。

进一步推导:







可得以下结论:
如果wkw_kwk​为非负,则C(u)C(u)C(u)始终位于C0(u)C^0(u)C0(u)和PkP_kPk​的线段上,其中C0(u)C^0(u)C0(u)是wk=0w_k=0wk​=0对应的点,uuu在[uk,uk+p+1][u_k,u_{k+p+1}][uk​,uk+p+1​]中。并且,当wkw_kwk​从0变为无穷大时,C(u)C(u)C(u)从C0(u)C^0(u)C0(u)移到PkP_kPk​,如果wkw_kwk​是无穷大,C0(u)C^0(u)C0(u)变成PkP_kPk​。
示意图:

4. 相关算法

4.1 节点插入:单点插入

假设有N+1N + 1N+1个控制点P0,P1,…,PnP_0,P_1,…,P_nP0​,P1​,…,Pn​,其相关权值分别为W0,W1,…,WNW_0,W_1,…,W_NW0​,W1​,…,WN​,节点向量为UUU,次数ppp.
令Pi=(xi,yi,zi)P_i=(x_i,y_i,z_i)Pi​=(xi​,yi​,zi​),则控制点PiW=(wixi,wiyi,wizi,wi)P^W_i=(w_ix_i,w_iy_i,w_iz_i,w_i)PiW​=(wi​xi​,wi​yi​,wi​zi​,wi​),0<=i<=n0<=i<=n0<=i<=n,节点向量UUU定义了一个ppp次的四维B样条曲线。在这个四维B样条曲线中插入一个新的节点ttt,得到一组新的控制点QiW=(Xi,Yi,Zi,Wi)Q^W_i=(X_i,Y_i,Z_i,W_i)QiW​=(Xi​,Yi​,Zi​,Wi​),0<=i<=n0<=i<=n0<=i<=n。通过将QiWQ^W_iQiW​的前三个分量除以第四个分量,将QiWQ^W_iQiW​投影回三维空间,得到给定NURBS曲线的新的控制点集。

4.2 De Boor’s Algorithm

只需将每个控制点乘以其权重,将NURBS曲线转换为4D B样条曲线,在此4D B样条曲线上执行de Boor算法,然后通过将前三个分量除以第四个分量,并保留第四个分量作为其新权重,将生成的曲线投影回3D。

5. Rational Bézier Curves

有理贝塞尔曲线:

6. Rational Bézier Curves: Conic Sections

构建圆锥曲线:
示意图:

计算:

抛物线:

椭圆:

双曲线:

结论:
由三个非共线控制点P0、P1和P2P_0、P_1和P_2P0​、P1​和P2​定义的有理Bézier曲线,当www大于、等于或小于1时,分别为双曲线、抛物线或椭圆。

7. Circular Arcs and Circles

周期性的弧或圆:
示意图:

计算:




结果:

完整圆的构建:

NURBS Curves相关推荐

  1. 【转载】NURBS概念

    第一章 NURBS概念 NURBS是一种非常优秀的建模方式,在高级三维软件当中都支持这种建模方式.NURBS能够比传统的网格建模方式更好地控制物体表面的曲线度,从而能够创建出更逼真.生动的造型.NUR ...

  2. matlab 三nurbs,nurbs 绘制 三维、二维图形,网格细化,基函数求解等 包 matlab 238万源代码下载- www.pudn.com...

    文件名称: nurbs下载 收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 334 KB 上传时间: 2013-03-16 下载次数: 18 提 供 者: 吴紫俊 ...

  3. NURBS概念[转载]

    第一章 NURBS概念 NURBS是一种非常优秀的建模方式,在高级三维软件当中都支持这种建模方式.NURBS能够比传统的网格建模方式更好地控制物体表面的曲线度,从而能够创建出更逼真.生动的造型.NUR ...

  4. Maya菜单中英文对照表(一)

    Maya菜单中英文对照表 转自http://blog.sina.com.cn/s/blog_c17af7bc01017r3n.html 1.animation File文件      NewScene ...

  5. metaball公式_Houdini 节点解释

    一 模型部分 掌握快捷键 1物体 2 点 3线 4面 a.编辑模型 主要使用edit工具 直接移动旋转缩放 在属性条添加软修改半径进行软修改 按m键 切换成笔刷修改类似zb b.简单练习4个常用命令 ...

  6. Houdini 节点

    -Houdini 节点 由于刚学Houdini,对于缺少的我会在后续持续补充........... 所有节点均按字母先后顺序排列. 表达式 $PT 点序号 $NPT点总序号数 fit 重映射区间 ra ...

  7. 小白的python与houdini之旅(houdini_转载houdini节点解析)

    Houdini 节点解释 OP 解释 Add Generators|polygon 创建点或Polygon线/面,为输入添加点或polys Align Filters|NURBS 互相对齐一组面或和辅 ...

  8. 【Autodesk Maya】ptyhon 常用命令

    常用命令 这三个绝对是最常用的命令了 help 列出命令的详细说明 dir 列出对象的属性及方法 print 打印 然后下面是我整理的一些常用命令 这部分是cmds与pymel都可直接调用的 file ...

  9. maya_mel语言中多边形点的提取和遍历操作方法

    一.问题分析: 有老同事问我,向用maya mel语言为模型上的选择单独点,做沿着法向方向的移动.如下图: 并使用了如下代码操作单个定点,成功了,: string $pp[]; string $obj ...

最新文章

  1. 激活手表显示无法登陆服务器,在Firefox中使用Nightwatch运行测试无法连接到Selenium服务器...
  2. Jdbc连接数据库大全
  3. Tomcat服务器与Eclipse的关联配置
  4. C语言 之 如何清除输入缓冲区所有内容
  5. Windows API一日一练(86)GetClipboardData函数
  6. eclipse使用技巧_有效使用Eclipse的热门技巧
  7. 组件使用中的细节点02
  8. python小老鼠编程_成都python函数学习教程,Python编写课程
  9. 面试被问 Go 的map[int64]int64 在 redis 会占多少空间...
  10. linux方面的杂谈
  11. JSK-23223 数字反转【进制】
  12. AweEraser for Mac如何永久删除笔记本电脑上的数据?
  13. ubuntu 安装 mysql debug_ubuntu 安装phpstorm+xdebug 动态调试环境
  14. pytorch搭建卷积神经网络【第三课_自己搭建对抗神经网络】
  15. intel 显卡驱动的节能设置(新版驱动)
  16. 用计算机算锐角三角比,锐角三角比中计算器使用方法ppt
  17. Tika 1.16架构及核心模块
  18. nrf52+RFX2401的PA+LNA方案,基于softdevice驱动
  19. 被迫营业:如何使用向日葵进行远程桌面控制(含MacOS)
  20. 02-SA8155P ADB数据传输

热门文章

  1. buuctf————[Zer0pts2020]easy strcmp
  2. 超详细的TypeScript入门教程!
  3. 怎么简单快速的将多个中文文件转换成英文的名称
  4. java-poi实现生成word
  5. 基于改进正弦余弦算法的函数寻优算法
  6. java criterion_hibernate Criterion和Criteria
  7. 网易云音乐python爬虫搜索接口,评论接口,歌词接口
  8. HTML+CSS+JavaScript 迷宫生成算法 【建议收藏】
  9. raid5硬盘插到计算机读取,【哭着写下这篇文章】win2008软raid5变成2个磁盘组的数据恢复...
  10. MySQL:带你掌握表的增删查改