B样条是无理的,组成无理B样条曲线或曲面。有理曲线或曲面可以精确地表示圆锥截面。非均匀有理B样条(Non-Uniform Rational B-Splines, NURBS)就是为了表达更精确的曲面引入的,其控制顶点包含权重。NURBS的基函数与B样条不同,但结点向量、张量积的性质和细分规则是不变的。

1 几何角度

在Rd\mathbb{R}^dRd空间的NURBS实体通过在Rd+1\mathbb{R}^{d+1}Rd+1空间的B样条实体投影得到,其中ddd是维数。图1说明了一个在R2\mathbb{R}^2R2空间的半圆C(ξ)C(\xi)C(ξ)是如何通过在R3\mathbb{R}^3R3空间的二次B样条曲线Cw(ξ)C^w(\xi)Cw(ξ)得到的。

控制顶点Pi\mathbf{P}_iPi​的表示如下
(Pi)j=(Piw)jwij=1,…,d(1)(\mathbf{P}_i)_j=\frac{(\mathbf{P}_i^w)_j}{w_i} \quad j=1,\dots,d \tag{1} (Pi​)j​=wi​(Piw​)j​​j=1,…,d(1)
其中wi=(Piw)d+1w_i=(\mathbf{P}_i^w)_{d+1}wi​=(Piw​)d+1​而Piw\mathbf{P}_i^wPiw​是“投影控制顶点”。权重wiw_iwi​在几何上是“投影控制顶点”的“高”,见图1。也就是说Rd\mathbb{R}^{d}Rd维的NURBS实体中的控制顶点,是维的B样条控制顶点前几维分量除以最后一维分量得到的。

图1     B样条曲线投影到z=1平面,得到NURBS半圆

从几何上来讲,在NURBS中进行结点插入首先要将NURBS中的控制顶点投影到Rd+1\mathbb{R}^{d+1}Rd+1维空间,之后使用B样条结点插入公式计算插入后的控制顶点,最后再将其投影到Rd\mathbb{R}^dRd维空间得到新的NURBS控制顶点。

2 代数角度

NURBS曲线的基函数表示为
Rip(ξ)=Ni,p(ξ)wiW(ξ)=Ni,p(ξ)wi∑i^=1nNi^,p(ξ)wi(2)R_{i}^{p}(\xi)=\frac{N_{i, p}(\xi) w_{i}}{W(\xi)}=\frac{N_{i, p}(\xi) w_{i}}{\sum_{\hat{i}=1}^{n} N_{\hat{i}, p}(\xi) w_{i}} \tag{2} Rip​(ξ)=W(ξ)Ni,p​(ξ)wi​​=∑i^=1n​Ni^,p​(ξ)wi​Ni,p​(ξ)wi​​(2)
其中,W(ξ)=∑i^=1nNi^,p(ξ)wi^W(\xi)=\sum_{\hat{i}=1}^{n} N_{\hat{i}, p}(\xi) w_{\hat{i}}W(ξ)=∑i^=1n​Ni^,p​(ξ)wi^​是权重函数,Ni,p(ξ)wiN_{i, p}(\xi) w_{i}Ni,p​(ξ)wi​是B样条基函数。

定义权重的对角矩阵
W=[w1w2⋱wn](3)\mathbf{W}=\left[\begin{array}{llll} w_{1} & & & \\ & w_{2} & & \\ & & \ddots & \\ & & & w_{n} \end{array}\right] \tag{3} W=⎣⎢⎢⎡​w1​​w2​​⋱​wn​​⎦⎥⎥⎤​(3)
记N(ξ)\mathbf{N}(\xi)N(ξ)是表示B样条基函数的列向量,则式(2)可以写成矩阵形式
R(ξ)=1W(ξ)WN(ξ)(4)\mathbf{R}(\xi)=\frac{1}{W(\xi)}\mathbf{W}\mathbf{N}(\xi) \tag{4} R(ξ)=W(ξ)1​WN(ξ)(4)
NURBS曲面的基函数可以表示为
Ri,jp,q(ξ,η)=Ni,p(ξ)Mi,p(ξ)wi,j∑i^=1n∑j^=1mNi^,p(ξ)Mj^,q(ξ)wi=1W(ξ,η)WN(ξ,η)(5)R_{i,j}^{p,q}(\xi,\eta)=\frac{N_{i, p}(\xi)M_{i, p}(\xi) w_{i,j}}{\sum_{\hat{i}=1}^{n} \sum_{\hat{j}=1}^{m} N_{\hat{i}, p}(\xi) M_{\hat{j}, q}(\xi) w_{i}}=\frac{1}{W(\xi,\eta)} \mathbf{W}\mathbf{N}(\xi,\eta) \tag{5} Ri,jp,q​(ξ,η)=∑i^=1n​∑j^​=1m​Ni^,p​(ξ)Mj^​,q​(ξ)wi​Ni,p​(ξ)Mi,p​(ξ)wi,j​​=W(ξ,η)1​WN(ξ,η)(5)
NURBS基函数与B样条基函数有相同的性质。

NURBS基函数的一阶导数
ddξRip(ξ)=wiW(ξ)Ni,p′(ξ)−W′(ξ)Ni,p(ξ)W2(ξ)(6)\frac{d}{d \xi} R_{i}^{p}(\xi)=w_{i} \frac{W(\xi) N_{i, p}^{\prime}(\xi)-W^{\prime}(\xi) N_{i, p}(\xi)}{W^{2}(\xi)} \tag{6} dξd​Rip​(ξ)=wi​W2(ξ)W(ξ)Ni,p′​(ξ)−W′(ξ)Ni,p​(ξ)​(6)
其中Ni,p′(ξ)=ddξNi,p(ξ)N_{i, p}^{\prime}(\xi)=\frac{d}{d\xi}N_{i,p}(\xi)Ni,p′​(ξ)=dξd​Ni,p​(ξ),W′(ξ)=∑i^=1nNi^,p′(ξ)wi^W^{\prime}(\xi)=\sum_{\hat{i}=1}^{n} N_{\hat{i}, p}^ {\prime}(\xi) w_{\hat{i}}W′(ξ)=∑i^=1n​Ni^,p′​(ξ)wi^​

在NURBS基函数确定之后,NURBS曲面便可以使用与B样条曲面类似的形式表示
C(ξ)=∑i=1nRip(ξ)Pi(7)\mathbf{C(\xi)}=\sum^n_{i=1} R_i^p(\xi) \mathbf{P}_i \tag{7} C(ξ)=i=1∑n​Rip​(ξ)Pi​(7)
NURBS曲面
S(ξ,η)=∑i=1n∑j=1mRi,jp,q(ξ,η)Pi,j(8)\mathbf{S(\xi,\eta)}=\sum^n_{i=1} \sum^m_{j=1} R_{i,j}^{p,q}(\xi,\eta) \mathbf{P}_{i,j} \tag{8} S(ξ,η)=i=1∑n​j=1∑m​Ri,jp,q​(ξ,η)Pi,j​(8)

3 一些例子

这里,我们将画一个半圆。我们使用二次NURBS基函数,控制顶点和权重如下
P=[x1y1x2y2x3y3x4y4]=[−10−111110]andw=[w1w2w3w4]=[11/21/21](9)\mathbf{P}=\left[\begin{array}{ll} x_{1} & y_1 \\ x_{2} & y_2 \\ x_{3} & y_3 \\ x_{4} & y_4 \end{array}\right]= \left[\begin{array}{ll} -1 & 0 \\ -1 & 1 \\ 1 & 1 \\ 1 & 0 \end{array}\right] \quad\quad\quad\quad and \quad\quad\quad\quad \mathbf{w}=\left[\begin{array}{ll} w_{1} \\ w_{2} \\ w_{3} \\ w_{4} \end{array}\right]= \left[\begin{array}{ll} 1 \\ 1/2 \\ 1/2 \\ 1 \end{array}\right] \tag{9} P=⎣⎢⎢⎡​x1​x2​x3​x4​​y1​y2​y3​y4​​⎦⎥⎥⎤​=⎣⎢⎢⎡​−1−111​0110​⎦⎥⎥⎤​andw=⎣⎢⎢⎡​w1​w2​w3​w4​​⎦⎥⎥⎤​=⎣⎢⎢⎡​11/21/21​⎦⎥⎥⎤​(9)
假设NURBS基函数和曲线在点ξ=3/2\xi=3/2ξ=3/2求值,则根据B样条基函数的表达式可以算出

再根据式(2)计算出权函数在ξ=3/2\xi=3/2ξ=3/2时的值为
W(ξ=32)=∑i=14Ni,2(ξ=32)wi=0⋅1+18⋅12+58⋅12+14⋅1=58(10)W(\xi=\frac{3}{2})=\sum_{i=1}^4N_{i,2}(\xi=\frac{3}{2})w_i=0\cdot1+\frac{1}{8}\cdot\frac{1}{2}+\frac{5}{8}\cdot\frac{1}{2}+\frac{1}{4}\cdot1=\frac{5}{8} \tag{10} W(ξ=23​)=i=1∑4​Ni,2​(ξ=23​)wi​=0⋅1+81​⋅21​+85​⋅21​+41​⋅1=85​(10)
于是,可以得到NURBS基函数在ξ=3/2\xi=3/2ξ=3/2处的值

当计算足够多个ξ\xiξ的值时,就可以画出NURBS基函数的图像,如图2所示

图2     NURBS和B样条基函数,结点向量为{0,0,0,1,2,2,2}

可以看出,权重w2,w3w_2,w_3w2​,w3​不仅仅影响基函数R22,R32R_2^2,R_3^2R22​,R32​也影响R12,R42R_1^2,R_4^2R12​,R42​

之后我们就可以使用给定的节点向量计算NURBS曲线上的点

作为比较,B样条曲线在同样的参数域的坐标计算结果如下

当计算足够多ξ\xiξ的值之后,就可以画出NURBS曲线和B样条曲线的图像。由于B样条曲线不包含权重(所有权重为1),所以控制点(−1,1)和(1,1)的比例会变得很大,使圆弧呈方形。

图3     使用NURBS构造的半圆和B样条构造的180度弧

注意,这里使用4个控制顶点构造的半圆在顶点(0,1)(0,1)(0,1)处有C1C^1C1连续性。使用结点向量Ξ={0,0,0,1,1,2,2,2}\Xi=\{0,0,0,1,1,2,2,2\}Ξ={0,0,0,1,1,2,2,2},5个基函数和控制顶点,构造的半圆拥有C0C^0C0连续性。在图1中的半圆就是使用上述的节点向量构造的,其C0C^0C0连续性可以在与其对应的B样条中看出。

非均匀有理B-样条(Non-Uniform Rational B-Splines, NURBS)基础知识相关推荐

  1. 贝塞尔曲线,B-样条,非均匀有理B样条梳理

    文章目录 1. 贝塞尔曲线(Bézier curve) 1.1 一阶贝塞尔曲线 1.2 二阶贝塞尔曲线.高阶贝塞尔曲线 1.3 贝塞尔曲线的一般形式 1.4 贝塞尔曲线的性质 1.5 贝塞尔曲线在运动 ...

  2. nurbs非均匀有理B样条实现船体重建

  3. UE4/5样条线学习(一):基础的样条线使用

    目录 效果展示: 制作: 组件 逻辑 效果展示: 注:按住alt拉轴可以拉出多一个点 制作: 第一步我们创建一个蓝图,命名为BP_Sline: 组件 之后我们开始找组件,输入bill,我们可以看见下面 ...

  4. 三维空间刚体运动4-3:四元数线性插值方法:Squad

    三维空间刚体运动4-3:四元数线性插值方法:Squad Squad的引出 B e ˊ z i e r c u r v e B\acute{e}zier \space curveB e ˊ zier c ...

  5. Games102 学习笔记

    Games 102 P2 数据拟合 拟合数据的好坏 分段线性插值函数 y = f 1 ( x ) y=f_1(x) y=f1​(x),数据误差为0,只有 C 0 C_0 C0​连续. 光滑插值函数 y ...

  6. OpenGL扩展库基本介绍以及配置(搜集)

    声明:此篇仅是个人学习使用,不涉及商业利益,参考众多前辈的资料,会加参考文献,感谢前辈们的宝贵经验,我只是做笔记. OpenGL有很多扩展库,例如gl.glu.glut.aux.wgl.glfw.gl ...

  7. [摘抄] Bezier曲线、B样条和NURBS

    Bezier曲线.B样条和NURBS,NURBS是Non-Uniform Rational B-Splines的缩写,都是根据控制点来生成曲线的,那么他们有什么区别了?简单来说,就是: Bezier曲 ...

  8. OpenGL-非均匀有理B样条

    什么是样条 样条 就是 分段低阶多项式来逼近多个点 假设我们有十个点 就需要用九次的多项式来逼近 九次多项式有十个未知数正好可以解一个方程组求出 分段的低阶多项式通过连续的连接来代替高阶多项式 什么是 ...

  9. Unraveling Bezier Splines 

    Unraveling Beziér Splines by Justin Reynen 原文网址:http://www.gamedev.net/reference/articles/article888 ...

  10. matlab nurbs闭合曲面,nurbs_toolbox Matlab 非均匀有理B样条函数,能生成B 曲线和曲面 238万源代码下载- www.pudn.com...

    文件名称: nurbs_toolbox下载 收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 37 KB 上传时间: 2014-11-05 下载次数: 7 提 供 者 ...

最新文章

  1. Dubbo 18 问
  2. 【JVM调优工具篇】使用JProfiler追踪GC Roots溯源
  3. 《中秋书月》月圆之夜,我和德鲁克
  4. C指针详解(经典,非常详细)
  5. 【牛客 - 318G】LLLYYY的数字思维 与【牛客 - 289J】这是一个沙雕题II(贪心构造)
  6. Linux kernel 国内repo
  7. Python-将一个列表的数据复制到另一个列表中
  8. STM32 F072RB 低功耗 开发调试
  9. “职业丑人”:大公司雇“职业杀手”大裁员
  10. 生活手机必备5款APP,一用就会上瘾,简直就是生活中的好帮手
  11. 【每日一读】Efficient Personalized PageRank Computation: A Spanning Forests Sampling Based Approach
  12. js设置长按esc退出全屏;拦截所有所有按键事件;全屏模式下拦截esc按键;javascript;chrome
  13. vue中用echarts 绘制geo 中国地图
  14. 解决png图片在IE6下的透明问题
  15. 软著 --- 注册与实名认证
  16. 域名反查、权重查询以及ICP备案查询——ipInfoSearch
  17. 分布式系统CAP理论深入探索和分析
  18. 金山打字通刷打字速度脚本
  19. 阿里开源的这个库,让 Excel 导出不再复杂(简简单单的写)
  20. JAVA毕设项目甜趣网上蛋糕店订购系统(java+VUE+Mybatis+Maven+Mysql)

热门文章

  1. linux tomcat6安装及配置
  2. 车机没有carlife可以自己下载吗_视频实测:苹果CarPlay和百度CarLife到底哪个更好用...
  3. android车机升级carplay,现代增加支持DIY升级CarPlay,Android Auto的车型
  4. 希尔伯特变换(matlab)
  5. 自然语言处理NLP技术里程碑、知识结构、研究方向和机构导师(公号回复“NLP总结”下载彩标PDF典藏版资料)
  6. Android中tcp和udp的区别,tcp和udp使用总结
  7. 计算机考试系统———全套视频
  8. 【工作笔记001】SuperMap配准TransCAD底图
  9. 是时候激活你的批判性思维了
  10. java番茄钟_番茄时间管理 - java Swing版