c++ - 如何应用样条基矩阵?

标签 c++ vector matrix spline

1) 我有一堆从 P0 到 PN 的样条控制点。
2) 我有一个样条基矩阵。

给定 2 个控制点索引和一个 t 值,我如何应用基础矩阵来获得插值位置?

现在我不断看到以下表格:

                [b00, b01, b02, b03] [p0]
                [b04, b05, b06, b07] [p1]
[t^3, t^2, t, 1][b08, b09, b10, b11].[p2]
                [b12, b13, b14, b15] [p3]

所以我假设 p0 等是我的控制点。我还假设这是每个组件(即 x、y、z)。但是我完全不确定我到底在用 t 值做什么。

谁能帮我解释一下?我很可能只是个白痴 :)

我正在使用 C++,并且有很多数学课,所以我不想扩展数学。只了解正在发生的事情会更有用。

最佳答案

是的,它是针对每个组件的,因此每个 p 都是一个数字。它们是四个连续控制点的 x 坐标(比方说)。

您的矩阵只是三个矩阵的乘积:普通矩阵乘法。所以这是一个总和:t^3.(b00.p0+b01.p1+...) + t^2.(b04.p0+b05.p1+...) + 等。这就是给定值的坐标值吨。 (当然,t^3 表示 t*t*t 而不是像 C 中那样的 t XOR 3。)

在样条曲线的每段上,t 的取值范围通常为 0 到 1。然后 b 值将使得一个段在 t=1 时的值等于下一段在 t=0 时的值(因此不依赖于第一段的第一个控制点或最后一个控制点下一个)。

关于c++ - 如何应用样条基矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5128041/

相关文章:

c++ - 异步事件循环设计和问题

java - 了解 vector 同步策略

c++ - 从 vector 中删除元素

javascript - 钛SQLite : Database pseudo array

c++ - Qt WindowMaximize 不改变几何(C++)

c++ - 防止 C++03 代码在 C++11 中表现不佳的好方法?

c++ - 如何在 C++ 中将 CSV 文件读入 vector

r - 将最近邻距离表转换为矩阵

python - numpy 矩阵,通过对每一行进行排序将 0 设置为值

c++ - 虚构造函数以及在其中调用虚函数会发生什么