B-spline Curves: Important Properties

 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习。

 (原来博客网址:http://blog.csdn.net/tuqu/article/details/4749586)

 原来的博主翻译还是很好的,所以前几章节直接借鉴参考原博主的内容。


  B-样条曲线有很多与贝塞尔曲线一样的重要性质,因为前者是后者的推广。而且,B-样条曲线有比贝塞尔曲线更渴望的性质。下面列出B-样条曲线一些最重要的性质。

  接下来我们假设一个由n + 1 控制点和一个节点向量U = { u0, u1, ...., um } 定义的 pB-样条曲线C(u),其中头p+1个和最后 p+1个节点是 "clamped" (即,u0 = u1 = ... = upum-p = um-p+1 = ... = um).

(1) 1.  B-样条曲线是个逐段曲线,每个分量是p次曲线。

  如前页提到的, C(u) 可看作是定义在每个节点区间的曲线段的联合。在下图中,其中n = 10, m = 14 和 p = 3, 头四个节点和最后四个节点是clamped而中间7个节点上均匀分布的。有8个节点区间,每个对应于一个曲线段。在下面左图,这些节点点以三角形标示。

  这个良好性质使得我们可以以更低次多项式来设计复杂形状。例如,下面右图显示了相同控制点的贝塞尔曲线。即使在其次数达到10仍然不能很好逼近控制折线 (polyline)!

  

  一般,次数越低,B-样条曲线越逼近它的控制折线(polyline)。下图都使用相同的控制折线(polyline)且节点是 clamped且 均匀分布。 第一个图是7次,中间的是5次而右图是3次。因此,当次数减小,产生的B-样条曲线越接近它的控制折线(polyline)。

    

(2) 等式 m = n + p + 1必须满足。

  由于每个控制点需要一个基函数且基函数数目满足 m = n + p + 1。

(3) Clamped B-样条曲线C(u)通过首尾两个控制点 P0 和Pn

  注意基函数N0,p(u) 是控制点 P0 的系数且在[u0,up+1)上非零因为对于一个clamped B-样条曲线有 u0 = u1 = ... = up = 0, N0,0(u), N1,0(u), ...., Np-1,0(u)为零且只有 Np,0(u)是非零(回忆三角计算格式) 因此,如果u = 0,那么N0,p(0)是1且C(0) = P0。相似地可得到C(1) = Pn

(4) 样条曲线包含在控制折线(ployline)的凸包内。更特别地,如果u 在节点区间[ui,ui+1)里,那么C(u)在控制点Pi-p, Pi-p+1, ..., Pi的凸包里。

  如果u 在节点区间 [ui, ui+1)里,那么只有p+1 个基函数(即,Ni,p(u), ... , Ni-p+1,p(u), Ni-p,p(u))在该节点区间非零。因为 Nk,p(u) 是控制点 Pk的系数,只有 p+1个控制点 Pi, Pi-1, Pi-2, .., Pi-p 有非零系数。因为在该节点区间上的基函数非零且累加和为 1,它们的“权重”平均( "weighted" average), C(u), 必须位于由控制点 Pi, Pi-1, Pi-2, .., Pi-p定义的凸包内。 “强”的意思是当 C(u) 仍位于由所有控制点定义的凸包内,它位于更小的里面。

   

  上面两个 B-样条曲线有11个控制点(即,n = 10), 3次 (即, p=3)  及15 个节点 (m = 14),其中头四个和最后四个节点 是 clamped。因此,节点区间的数目等于曲线段的数目。节点向量是

  

  左图有u 在节点区间 [u4, u5) = [0.12,0.25)上且相应的点(即 C(u))在第二条曲线段上。因此,有p+1 = 4 个基函数在给节点区间(即,N4,3(u), N3,3(u), N2,3(u) 和 N1,3(u) )上非零且相应的控制点是P4, P3, P2 and P1。阴影部分是由这四个点定义的凸包。很清楚C(u) 位于凸包内。

  右图的B-样条曲线同样方式定义。 但是,u 是在[u9, u10) = [0.75,0.87)上且非零基函数是 N9,3(u), N8,3(u), N7,3(u) 和N6,3(u)。 相应的控制点是 P9, P8, P7 和 P6

  因此,当  u 从 0移到1并越过一个节点时,一个基函数变为零而一个新的非零基函数开始有效。结果是,系数变为零的控制点会离开当前凸包的定义而被一个新的系数变为非零的控制点所代替。

(5) Pi 只影响在区间[ui, ui+p+1)上的曲线 C(u)

  这是从B-样条基函数的一个重要性质得到。回忆Ni,p(u) 在区间[ui, ui+p+1)上非零。. 如果u 不在该区间, Ni,p(u)Pi 在计算computing C(u)时没有作用因为 Ni,p(u)是零。另一方面,如果u 是指示的区间, Ni,p(u) 非零。如果 Pi 改变它的位置, Ni,p(u)Pi 被改变导致C(u)被改变。

    

  上面B-样条曲线以在前面凸包例子一样的参数定义。我们想移动控制点P2 。控制点的系数是N2,3(u) 且有非零系数在其上的区间是 [u2, u2+3+1) = [u2, u6) = [0,0.37)。因为 u2 = u3 = 0,只有三段被影响,分别是对应 u3, u4) 的(第一个曲线段的定义域), [u4, u5) (第二个曲线段的定义域) 和[u5, u6) (第三个曲线段的定义域) 。右图显示的是移动 P2 到右下角的结果。正如你看到的,只有第一,第二和第三曲线段改变了形状而剩余其他曲线段保持在原来位置没有改变。

  局部修改方案对曲线设计非常重要,因为我们可以局部修改曲线而不需全局改变形状。这将在 moeing control point 页详细说明。而且,如果需要更精细调整曲线形状,可以插入更多节点(因而更多控制点)以至于被影响的区域被限制在很窄区域。以后我们会谈到节点插入。

(6) C(u) 在重复度 k 的节点上是Cp-k 连续的

  如果 u 不是一个节点, C(u) 是p 次曲线段的中部因而是无限可微的。如果 u 是在 Ni,p(u)的非零定义域中的一个节点,既然后者是Cp-k 连续的,C(u)也一样。

  

  上图B-样条曲线有18个控制点 (即, n = 17),  4次(degree),clamped节点向量如下

  

  因此, u6 是一个双重节点, u9是一个三重节点而u13 是一个四重节点。因此, C(u) 在不是节点的任何点是 C4 连续的,在所有简单节点处 C3 连续的,在 u6C2 连续的,在u9C1 连续的,在u13C0 连续的。

  在曲线上与节点相对应的所有点用小三角标记。那些对应于多重节点的点用圆和重复度标记。要可视化 C4, C 3 和甚至C2 连续性之间的差别是很困难的。对 C1 情况,相应的点位于一条边(leg)上,而 C0 情况迫使曲线通过一个控制点。我们会在后面讨论修改节点时返回这个问题。

(7) 变分减小性质

  变分减小性质度对B-样条曲线也成立。如果曲线在平面(resp., 空间)上,这意味着没有直线(resp., 平面) 与 B-样条曲线相交的次数多于它与曲线控制折线(polyline)相交的次数

  

  在上图中,蓝线与控制折线(polyline)和B-样条曲线都相交6次,而黄线也与控制折线和B-样条曲线相交 5次。但是,橘黄线与控制折线相交 6次和曲线相交4次。

(8) 贝塞尔曲线是B-样条曲线的特例

  如果 n = p (即,B-样条曲线的次数是n, 控制点的数目减1有 2(p + 1) = 2(n + 1)个节点,其中 p + 1个在端(end)处clamped,这个B-样条曲线退化到贝塞尔曲线。

(9) 仿射不变性

  仿射不变性对B-样条曲线也成立。如果一个仿射变换应用于B-样条曲线,得到的结果可以从它的控制点的仿射像(images)构建得到。这是一个好性质。当我们要对B-样条曲线应用一个几何或仿射变换,这条性质说明我们可以对控制点进行变换,而这相当容易,而且一旦获得了这些变换后的控制点,变换B-样条曲线就是这些新点定义的。因此,我们不需要对曲线进行变换。

2. 使用B-样条曲线的优点

  B-样条曲线比贝塞尔曲线需要更多信息(即,曲线的次数和一个节点向量 )和更复杂的理论。但是它有更多优点来弥补这个缺点。

(1) 一个B-样条曲线可以是一个贝塞尔曲线。

(2) B-样条曲线满足贝塞尔曲线有的所有重要性质。

(3) B-样条曲线提供了比贝塞尔曲线更灵活的控制。

  例如,一个B-样条曲线的次数与控制点数目是分开的。更准确地说,我们可以使用更低次曲线而仍然保持很多控制点。我们可以改变一个控制点位置而不会全局地改变整个曲线形状(局部修改性质)。因为B-样条曲线满足强凸包性质,它们可以进行更精细的形状控制。而且,还有其他设计和编辑形状的技术比如改变节点。

  但是,记住B-样条曲线仍然是多项式曲线而多项式曲线不能表示许多有用的简单的曲线比如圆和椭圆。因此,需要B-样条的一个推广,NURBS。后面会讨论 NURBS 。

  

  

B-spline Curves 学习之B样条曲线性质(5)的更多相关文章

  1. B-spline Curves 学习之B样条曲线的移动控制点、修改节点分析(7)

    B-spline Curves: Moving Control Points 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习 ...

  2. B-spline Curves 学习之B样条曲线的系数计算与B样条曲线特例(6)

    B-spline Curves: Computing the Coefficients 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关 ...

  3. B-spline Curves 学习之B样条曲线定义(4)

    B-spline Curves: Definition 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. (原来博客网址:h ...

  4. B-spline Curves 学习之B样条曲线的导数(8)

    Derivatives of a B-spline Curve 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. (原来博客 ...

  5. B-spline Curves 学习前言与动机(1)

    B-spline Curves 学习之前言 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. (原来博客网址:http:// ...

  6. B-spline Curves 学习之B样条基函数的定义与性质(2)

    B-spline Basis Functions 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. (原来博客网址:http ...

  7. B-spline Curves 学习之B样条基函数计算实例(3)

    B-spline Basis Functions: Computation Examples 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完 ...

  8. [Thiinking in Java]自闭学习之路(一)构造器

    前言- 本文是为个人学习做的整理性质的笔记,肯定带有许多不妥的地方,仅供参考. (第五章·初始化与清理 <Thinking in Java>) 用构造器确保初始化 正文- 构造器: 什么是 ...

  9. 深度学习基础-基于Numpy的多层前馈神经网络(FFN)的构建和反向传播训练

    本文是深度学习入门: 基于Python的实现.神经网络与深度学习(NNDL)以及花书的读书笔记.本文将以多分类任务为例,介绍多层的前馈神经网络(Feed Forward Networks,FFN)加上 ...

随机推荐

  1. Oracle 表空间查询与操作方法

    一.查询篇 1.查询oracle表空间的使用情况 select b.file_id 文件ID,  b.tablespace_name 表空间,  b.file_name 物理文件名,  b.bytes ...

  2. JSON数组对象某个属性值查找

    1.引用国外开源Linq写法的js框架 地址:https://archive.codeplex.com/?p=jslinq https://www.nuget.org/packages/jslinq ...

  3. Java 学习思路

    内容中包含 base64string 图片造成字符过多,拒绝显示

  4. 汇编_指令_FLAGS

    标志名                                       标志 1           标志 0 OF   (溢出标志)                     OV     ...

  5. MySQL 高性能存储引擎:TokuDB初探

    在安装MariaDB的时候了解到代替InnoDB的TokuDB,看简介非常的棒,这里对ToduDB做一个初步的整理,使用后再做更多的分享. 什么是TokuDB? 在MySQL最流行的支持全事务的引擎为 ...

  6. 十三、jdk命令之Java内存之本地内存分析神器:NMT 和 pmap

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  7. mysql-6正则表达式

    mysql正则表达式 匹配的两种方式: 1.模糊匹配:like 2.正则表达式 正则表达式语法: 语法 说明 ^ 起始位置.如果设置了RegExp对象的Multiline属性,^也匹配'\n'或'\r ...

  8. 线程的等待方法:join

    其实多线程最复杂的地方在于不同线程间的同步问题,这其中会涉及到先后执行问题.共享变量问题等.这篇文章我们主要来开个头,看一下join方法. using System; using System.Thr ...

  9. cmd变量,参数,for循环,

    @echo offrem  *****************************************************rem  Create By Q_rui CopryRight@_ ...

  10. 36. Valid Sudoku + 37. Sudoku Solver

    ▶ 有关数独的两个问题. ▶ 36. 检测当前盘面是否有矛盾(同一行.同一列或 3 × 3 的小框内数字重复),而不关心该盘面是否有解. ● 初版代码,24 ms,没有将格子检测函数独立出去,行检测. ...