c++ - 向心 Catmull-Rom 样条如何工作?

标签 c++ opengl graphics directx spline

来自 this site ,里面好像有关于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)并根据毕达哥拉斯得到切线?

最佳答案

看看等式 2 - 它描述了控制点如何影响线。您可以看到点 P0P3 进入方程,用于沿着从 P1P2 的曲线绘制点。您还将看到,当 t == 0 时等式给出 P1,当 t == 1 时给出 P2 .

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

你不能从 R0R1 或者从 RN - 1RN 除非你添加R - 1RN + 1 的额外控制点。总体思路是,您可以选择要添加到序列头部和尾部的任何点,从而为自己提供计算样条曲线的所有参数。

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

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

关于c++ - 向心 Catmull-Rom 样条如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1085617/

相关文章:

C++删除txt文件中的最后一个字符

java - Jzy3d/JOGL 的 OSGi 路径错误(未找到 gluegen-rt)

c++ - OpenGL中n面棱镜的代码

java - 如何获取 Swing 小部件上字体的底部位置?

c - 什么(最小)C 图形库提供这些功能

c++ - 我如何使用 tinyxml 将 xml 属性转换为 C++ 类

c++ - 我如何创建一个接受 map 或 unordered_map 的函数?

c - setbkcolor() 在 Dev-C++ 4.9.9.2 中无效

c++ - 在 Return 中调用自身两次——尾递归与否?

c++ - std::vector<MyClass*> 的 VBO 和正确的步幅