B-样条曲线:移动控制点

B-样条曲线:移动控制点

B-spline Curves: Moving Control Points

                                                                                                                  

上一页特例                 回目录                        下一页修改节点      

移动控制点是改变B-样条曲线形状的最明显的方法。在前面页讨论的局部修改方案说明了修改控制点 Pi 的位置仅影响在区间[ui, ui+p+1)上的曲线 C(u) 。其中 p 是B-样条曲线的次数。实际上,形状的改变是在控制点被移动方向上的 t平移 。更准确地,如果控制点Pi向某个方向移动到一个新位置Qi ,那么点C(u),其中 u 在[ui, ui+p+1)上,会以相同方向从Pi 移动到 Qi。 但是,移动的距离点与点之间是不同的。下图中,控制点 P4 从左图位置移到中图新位置最后到右图最终位置。可看到那些对应节点的点(小三角标记)也以相同方向移动。

 

让我们看些细节。假设C(u) 是一个给定的p 次B-样条曲线定义如下:

 

设控制点 Pi 被移动到一个新位置Pi + v. 。那么,新 p 次B-样条曲线 D(u)如下:

 

因此,新曲线D(u)是简单的原始曲线C(u)的和以及一个平移向量Ni,p(u)v。 因为 Ni,p(u)在区间 [ui,ui+p+1)上非零,如果u 不在该区间,这个“平移”项为零。因此,移动一个控制点仅影响给定曲线部分形状。 下面左曲线是个由13个控制点 control points (即, n = 12)和18个节点(即, m = 17)定义的4次 (即, p = 4)B-样条曲线 。这些18个节点都是简单的并定义了一个clamped曲线(即,u0 = u1 = u2 = u3 = u4 = 0 和 u13 = u14 = u15 = u16 = u17 = 1)。剩余的节点定义了9个节点区间,因此如图所示有9个曲线段。这9个节点区间和曲线段命名如下:

 

区间 [u4,u5) [u5,u6) [u6,u7) [u7,u8) [u8,u9) [u9,u10) [u10,u11) [u11,u12) [u12,u13)
曲线段 1 2 3 4 5 6 7 8 9

 

现在让我们移动 P6。结果显示在上面右图。如你们所看到的,曲线以同样方向移动。P6 的系数是 N6,4(u), 其在[u6, u11)上非零。因此,移动 P6 影响曲线段3, 4, 5, 6 和7。曲线段1, 2, 8和9不受影响。 

来自强凸包性质的有用结果

回忆 强凸包性质,如果 u位于 [ u i, u i+1),那么 C( u) 位于由控制点 P i, P i-1, ..., P i-p+1, P i-p定义的凸包内。这有助于帮助我们进行下列设计任务:
  1. 强制曲线段变成直线段:让p+1 相邻控制点共线。

    如果 u 位于节点区间 [ui,ui+1)上,那么C(u) 位于由 p+1个控制点Pi, Pi-1, ..., Pi-p+1, Pi-p定义的凸包内。因为这对所有在该区间的u 都成立,所以在该节点区间的曲线段完全位于该凸包内。如果所有这些 p+1 个控制点是共线的(即,在一条直线上),凸包退化到线段,它所包含的曲线段也是如此。 结果,在节点区间 [ui,ui+1)上的曲线段变成了直线段。注意在这个情况下只有这个曲线段变成了直线段。其他曲线段仍然是非线性的。

     

    (a) (b) (c)
    (d) (e) (f)

    让我们来看一个例子。上面的图由 n = 15 (即,16个控制点), p = 3 (次数为3) 和m = 19 (即,20个节点)。注意头四个和最后四个节点是clamped。图 (a)是给定的B-样条曲线。 让我们使得P9, P8, P7P6 共线。因此,在 [u9,u10)上的曲线段位于由 P9, P8, P7P6定义的凸包内。 因为这个凸包是直线段,所以曲线段也必须是直线段。记住头四个节点是clamped因此头三个节点区间不存在。因为[u9,u10)是第7个节点区间,第7段退化为直线段P7P8。这通过图 (b), (c) 和 (d)说明。

    但是,为什么在 [u9,u10)上的曲线段只退化到曲线段? 看图(b)。阴影部分区域是 u 刚要进入enters [u9,u10)前的凸包。这个凸包由控制点 P8, P7, P6 和 P5定义,其还不是一条直线段。 一旦 u 进入[u9,u10),曲线段退化  (图 (c)).在u 离开[u9,u10)的同时,出现了一个新的凸包(图(d))。

    图 (e) 有 P5 及其四个后继共线。该曲线包含多于一个直线段。 图 (f) 有 P10 和它的5个后继共线;但是,它被移动到P8 和 P9之间的位置。这导致相应曲线段的部分成为一条直线(为什么?) 

     

  2. 强制B-样条曲线经过一个控制点:让p个相邻控制点重合(identical )

    考虑控制点Pi。因为在节点区间 [ui, ui+1)上的曲线段完全位于由Pi, ..., Pi-p+1,Pi-p定义的凸包内,如果我们使得前p 个控制点重合(即, Pi = Pi-1 = ... = Pi-p+1),凸包退化为一条直线段, Pi-pPi 而曲线必经过Pi

     

    上面左图的曲线是3次的。如果 P5 移到与 P6重合,曲线也移动更接近 P6 但还没有经过它。这如中图所示。注意曲线段的数目没有因为这个移动而改变;但是 P5 附近的小三角标记移动到更接近 P6。 如果 P4 被移到与P6 = P5 重合,曲线经过P6 且对应于节点的点因为移动而与控制点P4 重合。

     

  3. 强制B-样条曲线与控制折线的一边相切:让Pi-p, Pi-p+1 = Pi-p+2 = .... = Pi-1 = Pi 及Pi+1 共线。

    上面将 p 个相邻控制点重合。在那个控制点上,连续性是C0 因为曲线有一个尖头(见上面右图)。 但是,一个B-样条曲线在简单节点上是 Cp-1 在其他空间是无限可微的,在边Pi-pPi 上的控制点 Pi 上的曲线是Cp-1 连续的(退化控制点重新编号为i)而在边PiPi+1 上的控制点Pi 也是 Cp-1 连续的。因此,如果我们使得 Pi-p, PiPi+1 共线,只要两个相邻曲线段在该节点上没有尖头,它们在 PiCp-1 连续的。

     

    在上面图中,曲线的次数是 2。如果我们使得控制点2, 3, 4 和 5 共线而 3 和 4 重合,我们得到右图。共线保证了曲线段位于直线上而重合控制点强制 C3-1 = C2 连续。

                                                                                                                  

上一页特例                 回目录                        下一页修改节点        

                                                                                                                 

译注: 

  1.  本文翻译是“B-样条曲线(B-spline Curves)教程”中的一部分,其余翻译部分见“B-样条曲线(B-spline Curves)教程目录”。 
  2. “B-样条曲线(B-spline Curves)教程”是翻译自C.-K. Shene博士的CS3621 Introduction to Computing with Geometry Notes的第6部分“B-spline Curves”。
  3. 本文原文地址:Moving Control Points
  4. 本文首发“博士数学家园
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Catmull-Rom样条曲线是一种数学插值曲线的方法,它常用于计算机图形学和计算机动画中。这种曲线的特点是平滑且自然,可以通过一组数据点来生成连续且曲线流畅的路径。 Catmull-Rom样条曲线的计算是基于组成曲线的数据点和一个参数t的插值公式。它通过使用当前点和其相邻两个点之间的信息来计算每个点处的曲线方向和形状。具体来说,对于给定的四个数据点P0、P1、P2和P3,曲线在P1和P2之间的t值范围内插值。这个t值是一个[0, 1]之间的参数,可以控制曲线的形状。通过改变t值,我们可以调整曲线的曲率和张力,从而得到不同样式的曲线。 Catmull-Rom样条曲线具有一些优点。首先,它是C2连续的,也就是说曲线在连接点处的一阶和二阶导数都是连续的,这使得曲线更加平滑。其次,曲线通过所有给定的数据点,这使得它们在表示路径时具有较好的准确性。此外,如果我们需要在曲线某个位置添加一个新的控制点,只需更新相邻的两个数据点即可,而不会对整条曲线产生明显的影响。 Catmull-Rom样条曲线在计算机图形学和动画中有广泛的应用。它常被用于生成平滑的曲线路径,如自由摄像机移动路径、动态物体轨迹等。此外,它还可以用于生成平滑的形状、曲面等。总之,Catmull-Rom样条曲线是一种非常有用的数学工具,可以在许多计算机图形学和动画应用中发挥重要作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值