从这个似乎有关于catmull-rom splines的最详细信息的网站:http://www.mvps.org/directx/articles/catmull/,它提到需要四个点来创建样条曲线。然而,它没有提到点p0和p3如何影响p1和p2之间的值。
我的另一个问题是如何创建连续样条线?通过使p4 = p2(假设我们有p0,p1,p2,p3,p4,p5,p6 ...... pN)来定义点p1,p2与p4,p5连续是否容易。 / p>
更普遍的问题是如何计算catmull rom样条上的切线?它是否必须涉及在样条上取两个点(比如0.01,0.011)并根据输入值给出的位置坐标得到基于毕达哥拉斯的切线?
答案 0 :(得分:9)
看看等式2 - 它描述了控制点如何影响线。您可以看到点P0
和P3
进入等式,以绘制从P1
到P2
的曲线上的点。您还会看到等式在P1
时t == 0
和P2
时t == 1
。
此示例等式可以推广。如果您有点R0
,R1
,... RN
,那么您可以使用公式2和RK
绘制RK + 1
和P0 = RK - 1
之间的点数,P1 = RK
,P2 = RK + 1
和P3 = RK + 2
。
您无法从R0
到R1
或从RN - 1
到RN
进行投标,除非您添加额外的控制点以代替R - 1
和{ {1}}。一般的想法是,您可以选择要添加到序列的头部和尾部的任何点,以给自己计算样条曲线的所有参数。
您可以通过删除它们之间的一个控制点来将两个样条线连接在一起。假设您有RN + 1
,R0
,...,R1
和RN
,S0
,... S1
他们可以加入{{1} },SM
,...,R0
,R1
,RN - 1
,... S1
。
要计算任意点的切线,只需采用等式2的导数。
答案 1 :(得分:6)
Wikipedia article进一步深入。样条的一般形式将具有相关切向量的2个控制点作为输入。如果公共控制点处的切向量相等,则可以添加额外的样条线段,这样可以保持C1的连续性。
在特定的Catmull-Rom形式中,中间点处的切向量由相邻控制点的位置确定。因此,为了通过多个点创建C1连续样条曲线,在第一个和最后一个控制点处提供一组控制点和切向量就足够了。我认为标准行为是使用P1 - P0作为P0处的切向量和PN处的PN - PN - 。
根据维基百科的文章,要计算控制点Pn处的切线,可以使用以下公式:
T(n) = (P(n - 1) + P(n + 1)) / 2
这也回答了你的第一个问题。对于一组4个控制点,P1,P2,P3,P4,P2和P3之间的插值需要所有4个控制点的信息。 P2和P3本身定义插值段必须通过的端点。 P1和P3确定插值段在点P2处将具有的切向量。 P4和P2确定该段在点P3处将具有的切向量。控制点P2和P3处的切向量影响它们之间的插值段的形状。