切割卡穆尔-罗姆样条的算法?



我有一个带有 6 个 CV 的 catmull-rom 样条,想在样条沿的任意点切割它。

如何计算两个新样条的端点,以便它们保持形状与被切成两半之前一样?

所以,想象这是有 6 个点的样条:

p0      p2      p4
     /      / 
   /   C  /   
 /      /     
p1      p3      p5

如果我想在点 C 处切割这个样条,那么我将有两个新样条,每个样条,我猜 5 个 CV?

Spline #1: p0, p1, p2, X, C
Spline #2: C, X, p3, p4, p5

其中 X 是我需要添加的 CV,以保持样条的形状。但是我如何计算 X 需要处于的位置呢?

还是我的逻辑完全错误,并且有一个完全不同的解决方案?

谢谢!

Catmull-Rom 样条本质上是由多条三次贝塞尔曲线组成的样条。因此,如果您想在任何参数 t 处除以它,您只需找出参数所在的贝塞尔曲线,然后使用著名的 De Casteljau 算法除以该贝塞尔曲线。除法结果仍然是三次贝塞尔曲线。但是,如果你想找到一组新的CV,从中派生的Catmull-Rom样条将与原始样条的分割样条具有完全相同的形状,我会说这是不可能的。我将在下面详细解释。

根据 Catmull-Rom 样条的定义,由 6 个 CV:p0, p1,...,p5 定义的原始样条在向量方向 p2 处将有切线 (p1,p3(。对于由 5 个 CV 定义的新 Catmull-Rom 样条:p0、p1、p2、X 和 C,其中 C 是原始 CR 样条上的任意点,p2 处的切线将朝向量 (p1,X( 的方向。

如果我们希望新的 CR 样条精确地表示原始样条的分割样条曲线 #1,那么这两个样条在 p2 处的切线至少应该在同一方向上,这意味着点 X 应该位于由 p1 和 p3 定义的线上。此标准使得新的 Catmull-Rom 样条无法准确表示原始样条的分割样条 #1 的形状。

相关内容

  • 没有找到相关文章

最新更新