从这个网站似乎有大约卡特莫尔-ROM花键的最详细的信息: http://www.mvps.org/directx/articles/catmull/它使需要四个点来创建样条的记载。 但是它没有提及的点P0和P3是如何影响P1和P2之间的值。
另一个问题我已经是你会如何创建连续样条线? 难道是为定义点P1一样容易,P2可与P4连续,通过使P4 = P2 P5(这是假设我们有P0,P1,P2,P3,P4,P5,P6 ... PN)。
一个更普遍的问题是如何将一个计算上卡特莫尔ROM样条曲线的切线? 难道有涉及样条曲线上取两个点(说在0.01,0.011)和获得基于给定的位置坐标的输入值给出毕达哥拉斯切线?
看看公式2 - 它描述了控制点如何影响线。 你可以看到点P0
和P3
进入方程沿曲线绘制点P1
至P2
。 您还可以看到该方程给出了P1
的时候t == 0
和P2
的时候t == 1
。
此示例方程可以推广。 如果你有个R0
, R1
,... RN
那么你可以绘制的点RK
和RK + 1
通过使用公式2 P0 = RK - 1
, P1 = RK
, P2 = RK + 1
和P3 = RK + 2
。
你可以不积从R0
到R1
或从RN - 1
到RN
,除非你增加额外的控制点,以代替R - 1
和RN + 1
。 总的想法是,你可以选择你要添加到序列的头部和尾部给自己所有的参数,计算出什么样点。
您可以通过删除它们之间的控制点中的一个连接两个样条在一起。 假设你有R0
, R1
,......, RN
和S0
, S1
,... SM
它们可以加入到R0
, R1
,..., RN - 1
, S1
, S2
,... SM
。
为了计算切线在任何点只取式(2)的衍生物。
在维基百科的文章进入多一点点深度。 花键的一般形式需要为具有相关的切向量输入2控制点。 然后附加的花键段可以加入,条件是所述公共控制点的切线向量相等,它保留了C1连续性。
在具体的Catmull-ROM形式,在中间点的所述切向量被邻近控制点的位置来确定。 因此,为了创建通过多个点的C1连续样条,它是足以提供该组控制点和切线在第一和最后一个控制点的载体。 我认为标准的行为是使用P1 - P0在P0和PN切向量 - 在PN PN-1。
根据维基百科的文章,计算在控制点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影响它们之间的内插段的形状的切向量。