【问题标题】:Algorithm to cut a catmull-rom spline?切割catmull-rom样条的算法?
【发布时间】:2018-09-19 19:27:51
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: cut spline intersect catmull-rom-curve


    【解决方案1】:

    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 的形状。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多