我有一个带有 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 的形状。