0

我有一个带有 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 需要在的位置呢?

还是我的逻辑完全错误,问题有完全不同的解决方案?

谢谢!

4

1 回答 1

0

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

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

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

于 2018-09-20T18:43:10.673 回答