17

这个站点,它似乎有关于 Catmull-Rom 样条的最详细信息,似乎需要四个点来创建样条。但是,它没有提到点 p0 和 p3 如何影响 p1 和 p2 之间的值。

我的另一个问题是如何创建连续样条曲线?通过使 p4 = p2 定义点 p1, p2 与 p4, p5 连续(即假设我们有 p0, p1, p2, p3, p4, p5, p6, ..., pN )。

一个更普遍的问题是如何计算 Catmull-Rom 样条上的切线?考虑到这些输入值给出的位置坐标,它是否必须涉及在样条曲线上取两个点(比如 0.01、0.011)并根据毕达哥拉斯得到切线?

4

2 回答 2

10

看看等式 2——它描述了控制点如何影响线。您可以看到点P0P3进入方程,以绘制从P1到的曲线上的点P2。您还将看到等式给出了P1whent == 0P2when t == 1

这个示例方程可以被推广。如果您有点R0, R1, ...那么您可以使用等式 2 和, 和绘制点RN之间的点。RKRK + 1P0 = RK - 1P1 = RKP2 = RK + 1P3 = RK + 2

除非您添加额外的控制点来代替and ,否则您无法绘制 from R0toR1或 from RN - 1to 。一般的想法是,您可以选择要添加到序列的头部和尾部的任何点,以便为自己提供所有参数来计算样条曲线。RNR - 1RN + 1

您可以通过在两条样条线之间放置一个控制点来将它们连接在一起。假设你有R0, R1, ..., RNand S0, S1, ...SM它们可以连接成R0, R1, ..., RN - 1, S1, S2, ... SM

要计算任意点的正切,只需对等式 2 求导即可。

于 2009-07-06T07:05:32.987 回答
6

维基百科的文章更深入一点。样条的一般形式将 2 个具有相关切向量的控制点作为输入。如果公共控制点处的切向量相等,则可以添加额外的样条线段,从而保持 C1 连续性。

在特定的 Catmull-Rom 形式中,中间点的切向量由相邻控制点的位置决定。因此,要通过多个点创建 C1 连续样条曲线,只需提供一组控制点以及第一个和最后一个控制点处的切向量即可。我认为标准行为是使用 P1 - P0 作为 P0 处的切向量和 PN - PN-1 处的 PN。

根据 Wikipedia 文章,要计算控制点 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 处的切向量影响它们之间插值段的形状。

于 2009-07-06T06:51:51.407 回答