分割三次样条曲线计算



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

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

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

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

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

如果你担心的是你想避免多次重复整个计算,我想对几个有重叠的部分(比如20个点)进行处理,并放弃所有部分的10个极值点的结果就足够了。

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

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

编辑问题更新后-我看不出平行治疗和您的问题之间的关系。

相反,您可以连接具有C1连续性的子范围:

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

对于下一个集合,使用预定义的起始偏移(从上一个集合开始)和再次结束零曲率条件计算样条插值。

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

最新更新