划分三次样条计算

Dividing cubic spline computation

我有 n 个 3D 点(20k 到 30k),我想使用三次样条对它们进行插值。这里的问题是我不会同时拥有所有这些点,它们会被发送给我。所以我不想等到收到所有这些才开始插值。

因此,我选择将这些点拆分为子集,对第一个点子集进行插值,使用它,然后开始对下一个点子集进行插值,依此类推

(将这些点分成数百个点的子集 n1,n2,... 并为每个子集找到样条,使结果与 n 点样条曲线的结果相同。)

我认为在计算过程中重叠这些子集就足以做到这一点,但似乎不是。你有什么建议来解决这个问题?

插值样条的计算是在整个点序列上执行的,两个独立的重叠部分的结果会略有不同。请注意,例如,第一个样条的最后一个点的边界条件可能包括预定义的偏差或零曲率,而计算第二个样条的相同部分以提供连续性。

您可以尝试为重叠区域计算某种平滑过渡。

编辑 问题更新后-我看不到并行处理与您的问题之间的关系。

相反,您可以使用 C1 连续性连接子范围:

计算第一组点的样条插值。使用自由端条件 - 零曲率。记住端点的偏差(线性系数)。

对于下一组使用预定义的起始偏差计算样条插值 - 从最后一组开始,再次结束零曲率条件。

顺便说一句,数千个点的样条插值应该工作得非常快(它是线性算法)。真的是瓶颈吗?

您可以随时使用可用点(大概以正确的顺序!)开始插值。三次样条插值是一个非常稳定的过程,当你添加更多点时,大部分曲线保持不变。

如果你担心你想避免多次重做整个计算,我想在几个有重叠的部分(比如 20 个点)上工作并丢弃 10 个极值点的结果就足够了所有部分。