NURBS Curves
文章目录
- 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,NURBS 曲线退化成B样条曲线.
- NURBS 曲线是有理曲线.
2. 性质
2.1 NURBS基函数的性质
- Ri,p(u)R_{i,p}(u)Ri,p(u)是关于uuu的ppp次有理函数.
- 如果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
- 当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.
- 当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∑iRj,p(u)=0.
- 如果节点数量为m+1m+1m+1,B样条基函数的次数为ppp,个数为n+1n+1n+1,则m=n+1+pm=n+1+pm=n+1+p.
- 基函数Ri,p(u)R_{i,p}(u)Ri,p(u)在kkk重节点uuu处Cp−kC^{p-k}Cp−k连续.
- 如果对所有的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曲线的性质
- NURBS曲线是次数为ppp的分段有理曲线组合.
- m=n+p+1m = n + p + 1m=n+p+1.
- Clamped NURBS曲线经过p0p_0p0,pnp_npn两个控制点.
- 强凸包性:
当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组成的凸包内. - 局部修改特性:
改变控制点PiP_iPi的位置,只会影响处在[ui,ui+p+1)[u_i,u_{i+p+1})[ui,ui+p+1)区间内的曲线段C(u)C(u)C(u). - C(u)C(u)C(u)在kkk重节点uuu处Cp−kC^{p-k}Cp−k连续.
- 变差递减性.
- B样条曲线和贝塞尔曲线是NURBS曲线的特例.
- 投影不变性.
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=(wixi,wiyi,wizi,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相关推荐
- 【转载】NURBS概念
第一章 NURBS概念 NURBS是一种非常优秀的建模方式,在高级三维软件当中都支持这种建模方式.NURBS能够比传统的网格建模方式更好地控制物体表面的曲线度,从而能够创建出更逼真.生动的造型.NUR ...
- matlab 三nurbs,nurbs 绘制 三维、二维图形,网格细化,基函数求解等 包 matlab 238万源代码下载- www.pudn.com...
文件名称: nurbs下载 收藏√ [ 5 4 3 2 1 ] 开发工具: matlab 文件大小: 334 KB 上传时间: 2013-03-16 下载次数: 18 提 供 者: 吴紫俊 ...
- NURBS概念[转载]
第一章 NURBS概念 NURBS是一种非常优秀的建模方式,在高级三维软件当中都支持这种建模方式.NURBS能够比传统的网格建模方式更好地控制物体表面的曲线度,从而能够创建出更逼真.生动的造型.NUR ...
- Maya菜单中英文对照表(一)
Maya菜单中英文对照表 转自http://blog.sina.com.cn/s/blog_c17af7bc01017r3n.html 1.animation File文件 NewScene ...
- metaball公式_Houdini 节点解释
一 模型部分 掌握快捷键 1物体 2 点 3线 4面 a.编辑模型 主要使用edit工具 直接移动旋转缩放 在属性条添加软修改半径进行软修改 按m键 切换成笔刷修改类似zb b.简单练习4个常用命令 ...
- Houdini 节点
-Houdini 节点 由于刚学Houdini,对于缺少的我会在后续持续补充........... 所有节点均按字母先后顺序排列. 表达式 $PT 点序号 $NPT点总序号数 fit 重映射区间 ra ...
- 小白的python与houdini之旅(houdini_转载houdini节点解析)
Houdini 节点解释 OP 解释 Add Generators|polygon 创建点或Polygon线/面,为输入添加点或polys Align Filters|NURBS 互相对齐一组面或和辅 ...
- 【Autodesk Maya】ptyhon 常用命令
常用命令 这三个绝对是最常用的命令了 help 列出命令的详细说明 dir 列出对象的属性及方法 print 打印 然后下面是我整理的一些常用命令 这部分是cmds与pymel都可直接调用的 file ...
- maya_mel语言中多边形点的提取和遍历操作方法
一.问题分析: 有老同事问我,向用maya mel语言为模型上的选择单独点,做沿着法向方向的移动.如下图: 并使用了如下代码操作单个定点,成功了,: string $pp[]; string $obj ...
最新文章
- 激活手表显示无法登陆服务器,在Firefox中使用Nightwatch运行测试无法连接到Selenium服务器...
- Jdbc连接数据库大全
- Tomcat服务器与Eclipse的关联配置
- C语言 之 如何清除输入缓冲区所有内容
- Windows API一日一练(86)GetClipboardData函数
- eclipse使用技巧_有效使用Eclipse的热门技巧
- 组件使用中的细节点02
- python小老鼠编程_成都python函数学习教程,Python编写课程
- 面试被问 Go 的map[int64]int64 在 redis 会占多少空间...
- linux方面的杂谈
- JSK-23223 数字反转【进制】
- AweEraser for Mac如何永久删除笔记本电脑上的数据?
- ubuntu 安装 mysql debug_ubuntu 安装phpstorm+xdebug 动态调试环境
- pytorch搭建卷积神经网络【第三课_自己搭建对抗神经网络】
- intel 显卡驱动的节能设置(新版驱动)
- 用计算机算锐角三角比,锐角三角比中计算器使用方法ppt
- Tika 1.16架构及核心模块
- nrf52+RFX2401的PA+LNA方案,基于softdevice驱动
- 被迫营业:如何使用向日葵进行远程桌面控制(含MacOS)
- 02-SA8155P ADB数据传输
热门文章
- buuctf————[Zer0pts2020]easy strcmp
- 超详细的TypeScript入门教程!
- 怎么简单快速的将多个中文文件转换成英文的名称
- java-poi实现生成word
- 基于改进正弦余弦算法的函数寻优算法
- java criterion_hibernate Criterion和Criteria
- 网易云音乐python爬虫搜索接口,评论接口,歌词接口
- HTML+CSS+JavaScript 迷宫生成算法 【建议收藏】
- raid5硬盘插到计算机读取,【哭着写下这篇文章】win2008软raid5变成2个磁盘组的数据恢复...
- MySQL:带你掌握表的增删查改