B-样条曲线(B-spline Curve)总结

概述

B-样条曲线,是B-样条基函数的线性组合,是贝塞尔曲线的一般化。
给定n+1个控制点,P0,P1, ..., Pn以及一个节点向量U = { u0,u1, ..., um }, p 次B-样条曲线由这些控制点和节点向量U 定义,其公式为:

B-样条曲线公式

在上式中, Ni,p(u)是 p次B-样条基函数。

B-样条基函数

节点向量

设U 是m + 1个非递减数的集合,u0 <=u1 <= u2 <= ... <= um。ui称为节点(knots), 集合U 称为节点向量(knot vector), 半开区间[ui, ui+1) 是第i个节点区间(knot span)。注意某些ui可能相等,某些节点区间会不存在。如果一个节点ui出现 k 次 (即,ui = ui+1 = ... = ui+k-1), 其中 k > 1, ui 是一个重复度(multiplicity)为k 的多重节点,写为 ui(k)。 否则,如果ui只出现一次,它是一个简单节点。如果节点等间距(即, ui+1 - ui 是一个常数,对 0 <= i <= m - 1),节点向量或节点序列称为均匀的;否则它是非均匀的。一般情况下,我们经常使用 u0 = 0和 um = 1,所以定义域是闭区间[0,1]。

基函数定义

为了定义B-样条基函数,我们还需要一个参数,基函数的次数(degree)p,第i个p次B-样条基函数,写为Ni,p(u),递归定义如下:

B-样条基函数定义

上述公式通常称为Cox-de Boor递归公式。
为了理解计算Ni,p(u)的方法,我们使用三角计算格式:

基函数计算格式

重要性质

  1. Ni,p(u)是一个在u上的p次多项式;
  2. 非负性,对于所有的i,p和u,Ni,p(u)是非负的;
  3. 局部支撑(Local Support),Ni,p(u)是在[ui,ui+p+1]上的非零多项式;
  4. 在任意区间[ui,ui+1),最多有p+1个p次基函数非零,即Ni-p,p(u),Ni-p+1,p(u),Ni-p+2,p(u),……,Ni,p(u);
  5. 单位分解(Partition of Unity),所有的非零的p次基函数在区间[ui,ui+1)上的和为1;
  6. 如果节点数是m+1,基函数的次数是p,而p次基函数的数目是n+1,则m=n+p+1;
  7. 基函数Ni,p(u)是p次多项式的复合曲线,连接点在[ui,ui+p+1]上的节点处;
  8. 在一个有重复度k的节点处,基函数Ni,p(u)是Cp-k连续的。

多重节点的影响

  1. 每个重复度 k 的节点减小最多k-1 个基函数的非零定义域;
  2. 在每个重复度k的内部节点,非零基函数的数目最多p - k + 1, 其中 p 是基函数的次数。

B-样条曲线

曲线类别

1.如果节点向量没有任何特别的结构,那么产生的曲线不会与控制折线(polyline)的第一边(leg)和最后一边(leg)接触,如下面左图所示。这种类型的B-样条曲线称为\color{red}{开(open)B-样条曲线}
2.我们可能想强制曲线使得它分别与第一个控制点和最后一个控制点的第一边和最后一边相切,像贝塞尔曲线那样。为了做到这些,第一个节点和最后一个节点必须是重复度为p+1。这就产生了所谓的\color{red}{clamped B-样条曲线}。参见下边中间的图。
3.通过重复某些节点和控制点,产生的曲线会是\color{red}{闭(closed)曲线}。这种情况,产生的曲线的开始和结尾连接在一起形成了一个闭环如下边右图所示。

B-样条曲线种类示意

开曲线

对于open(B-样条曲线),定义域是[up,um-p]
考虑一个由14个控制点(即,n = 13)定义的 6次 (即,p = 6) B-样条曲线。其节点的数目是 21 (即, m = n + p + 1 = 20)。如果节点向量是均匀的, 节点是0, 0.05, 0.10, 0.15, ..., 0.90, 0.95 和 1.0。 开(open)曲线定义在[up, um-p] = [u6, u14] = [0.3, 0.7]上且与第一边和最后一边不相切。下面上图显示了曲线而下图给出了B-样条基函数。

B-样条曲线

B-样条基函数

闭曲线

有许多方法来产生闭曲线。简单的一种就是或者wrapping控制点或者wrapping节点向量。

wrapping控制点

假设我们想构建一个p次闭(closed)B-样条曲线C(u),由n+1 控制点P0,P1, ..., Pn.定义。节点数目是m+1, 其中 m = n + p + 1. 这儿是构建过程:

  1. 设计一个均匀 m+1 个节点的节点序列:u0 = 0, u1 = 1/m, u1 = 2/m, ..., um = 1。注意曲线的定义域是 [up, um-p].
    2.Wrap头p 个和最后p 个控制点。更准确地,设P0 = Pn-p+1, P1=Pn-p+2, ..., Pp-2 = Pn-1 and Pp-1 = Pn. 如下图所示。
    closed-curve-1.jpg

    closed-curve-2.jpg

    closed-curve-3.jpg

    closed-curve-4.jpg

wrapping节点

假设我们想要构建一个由n+1个控制点P0, P1, ..., Pn定义的p次闭B-样条曲线C(u) 。构建过程如下:

  1. 增加一个新控制点 Pn+1 =P0.因此,控制点的数目是 n+2;
  2. 找到一个合适的有 n+1节点的节点序列u0, u1, ..., un 。这些节点不必要是均匀的,an advantage over the method discussed above
  3. 增加 p+2 个节点并 wrap 头 p+2个节点: un+1 = u0, un+2 = u1, ..., un+p = up-1, un+p+1 = up, un+p+2= up+1,如下图所示。这样,我们有n+p+2 = (n+1)+p+1 个节点;
  4. 定义在上述构建的 n+1个控制点和n+p+2 个节点上的 p次开B-样条曲线C(u)是一个闭曲线,在连接点处C(u0) = C(un+1)有Cp-1 连续性。注意闭曲线的定义域是 [u0, un+1]。
    Wrapping节点

重要性质

  1. B-样条曲线是个逐段曲线,每个分量是p次曲线;
  2. 等式m=n+p+1必须满足;
  3. Clamped B-样条曲线C(u)通过首尾两个控制点 P0Pn
  4. 样条曲线包含在控制折线(ployline)的凸包内。更特别地,如果u 在节点区间[ui,ui+1)里,那么C(u)在控制点Pi-p, Pi-p+1, ...,Pi的凸包里;
  5. Pi 只影响在区间[ui,ui+p+1)上的曲线 C(u);
  6. C(u) 在重复度 k 的节点上是Cp-k 连续的 ;
  7. 变分减小性质对B-样条曲线也成立。如果曲线在平面(resp., 空间)上,这意味着没有直线(resp., 平面) 与 B-样条曲线相交的次数多于它与曲线控制折线(polyline)相交的次数;
  8. 贝塞尔曲线是B-样条曲线的特例;
  9. 仿射不变性。

链接

本文旨在加深对B-样条曲线的理解,主要是对下述教程的总结,具体内容可以参考如下教程:
B-样条曲线教程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容