我有一个带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所需的位置?
或者我的逻辑是完全错误的,对于这个问题有完全不同的解决方案吗?
谢谢!
答案 0 :(得分:0)
Catmull-Rom样条线实质上是由多个三次Bezier曲线组成的样条线。因此,如果要在任何参数t处对其进行除法,则只需找出该参数位于哪个Bezier曲线上,然后使用著名的De Casteljau算法对该Bezier曲线进行除法即可。除法后的结果仍然是三次贝塞尔曲线。但是,如果要查找新的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处的切线将朝向vector(p1,X)方向。
如果我们希望新的CR样条曲线精确地表示原始样条曲线的分割样条#1,则这两个样条线在p2处的切线至少应在同一方向上,这意味着点X应该位于该线上由p1和p3定义。此条件使新的Catmull-Rom样条无法准确表示原始样条中的#1样条的形状。