B-spline Curves 学习之B样条曲线性质(5)
B-spline Curves: Important Properties
本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习。
(原来博客网址:http://blog.csdn.net/tuqu/article/details/4749586)
原来的博主翻译还是很好的,所以前几章节直接借鉴参考原博主的内容。
B-样条曲线有很多与贝塞尔曲线一样的重要性质,因为前者是后者的推广。而且,B-样条曲线有比贝塞尔曲线更渴望的性质。下面列出B-样条曲线一些最重要的性质。
接下来我们假设一个由n + 1 控制点和一个节点向量U = { u0, u1, ...., um } 定义的 p次B-样条曲线C(u),其中头p+1个和最后 p+1个节点是 "clamped" (即,u0 = u1 = ... = up 和 um-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 连续的,在 u6是C2 连续的,在u9 是 C1 连续的,在u13是 C0 连续的。
在曲线上与节点相对应的所有点用小三角标记。那些对应于多重节点的点用圆和重复度标记。要可视化 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)的更多相关文章
- B-spline Curves 学习之B样条曲线的移动控制点、修改节点分析(7)
B-spline Curves: Moving Control Points 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习 ...
- B-spline Curves 学习之B样条曲线的系数计算与B样条曲线特例(6)
B-spline Curves: Computing the Coefficients 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关 ...
- B-spline Curves 学习之B样条曲线定义(4)
B-spline Curves: Definition 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. (原来博客网址:h ...
- B-spline Curves 学习之B样条曲线的导数(8)
Derivatives of a B-spline Curve 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. (原来博客 ...
- B-spline Curves 学习前言与动机(1)
B-spline Curves 学习之前言 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. (原来博客网址:http:// ...
- B-spline Curves 学习之B样条基函数的定义与性质(2)
B-spline Basis Functions 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. (原来博客网址:http ...
- B-spline Curves 学习之B样条基函数计算实例(3)
B-spline Basis Functions: Computation Examples 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完 ...
- [Thiinking in Java]自闭学习之路(一)构造器
前言- 本文是为个人学习做的整理性质的笔记,肯定带有许多不妥的地方,仅供参考. (第五章·初始化与清理 <Thinking in Java>) 用构造器确保初始化 正文- 构造器: 什么是 ...
- 深度学习基础-基于Numpy的多层前馈神经网络(FFN)的构建和反向传播训练
本文是深度学习入门: 基于Python的实现.神经网络与深度学习(NNDL)以及花书的读书笔记.本文将以多分类任务为例,介绍多层的前馈神经网络(Feed Forward Networks,FFN)加上 ...
随机推荐
- OpenLTE安装教程
安装需求: USB3 interface Modern multicore CPU (Intel Core i5, Core i7 or equivalent with SSE4.1 SSE4.2 a ...
- 修改numa和io调度优化mysql性能
一.NUMA设置单机单实例,建议关闭NUMA,关闭的方法有三种:1.硬件层,在BIOS中设置关闭:2.OS内核,启动时设置numa=off:3.可以用numactl命令将内存分配策略修改为interl ...
- Unicode化
为了程序编写方便,根除乱码问题等等需求,很多新项目都采用了Unicode编码.同时,不少使用MBCS多字节编码的旧项目为了升级,也有了转向Unicode编码的意向.不过,从MBCS升级到Unicode ...
- 【转】Java 字节流与字符流的区别
字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...
- Gson的几种使用方式
一.Gson是一个Java类库,用于将Java对象转换为它们所代表的JSON数据,也可以用于将一个JSON字符串转换为对应的Java对象.这个是谷歌开发的一套针对json处理的一个类库,功能很强大. ...
- jquery选择器用法
jquery的基础选择器 选择器的用法其实跟咱们当时讲css的选择器用法类似,只是代码书写的不同 <ul> <li id="brother" class=&quo ...
- django-form.errors和前端上传文件
一.上传文件: 在相应的模型里面定义`FileField`或者是`ImageField`类型的字段,并且1.设置好`upload_to`参数来指定上传的路径. class User(models.Mo ...
- 4 MySQL--表(增删改查)
1.表的介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段 id,name,qq,age称为字段,其余的,一行内容称为一条记录 2.创建表: ...
- dom4j读取XML文件内容
<?xml version="1.0" encoding="UTF-8"?> <RESULT> <VALUE> <NO ...
- 2015年传智播客JavaEE 第168期就业班视频教程 02-ERP简介
其实ERP描述的是管理一个企业的整体的所有的资源.ERP是帮你管整个企业的运行.那它是管哪一类企业呢?比如说帮光线传媒.ERP更多是用在生产制造企业,这是最好的,其次的就是这种销售型企业,二道贩子那种 ...