首页 > 解决方案 > 使用python进行3D曲线拟合

问题描述

我正在尝试减少 3D 曲线的数据点数量,目前我有 20000 个点,我想在不丢失太多信息的情况下将其减少到 2000 个左右。

我在 python 上这样做。

举个简单的例子,想想圆柱体表面的螺旋。

是否有任何内置函数可以做到这一点?

我尝试使用 Ramer–Douglas–Peucker 算法来简化线条,但由于曲线的性质,对于每个忽略的数据点,最终图都低于。看一个 2D 例子的图片,橙色是使用 rdp 产生的,绿色是我想要的。

在此处输入图像描述

我希望程序的输出是一个约 2000 个坐标的数组,它们仍然代表 3D 曲线的形状,但它们不一定是原始坐标,我希望一些点过冲而其他点下冲。

谢谢您的帮助

更新:最后我选择做一些非常复杂的事情,但给了我我想要的东西。我开始使用 rdp 算法来减少点数。有了这些新信息,我将一条最适合的直线拟合到新减少点之间的原始点的分布:即如果算法“忽略”13 个点,我拟合从点 0 到点 14 的线,并做了对于算法跳过的下一段相同,例如 7 个点,所以我适合从 14 到 22 等。有了这些最适合的线,我发现这些点是相交的线,或者如果线不相交,最近的点在每一行到另一行。由于我的问题的性质,我不需要我的数据是连续的,所以 2000 个“不连续”段不是问题。非常感谢您的帮助!

标签: pythoncurve-fittingspline

解决方案


最后我选择了做一些相当投入的事情,但给了我我想要的东西。我开始使用 rdp 算法来减少点数。有了这个新信息,我将一条最适合的直线拟合到新的减少点之间的原始点的分布:即如果算法“忽略”13个点,我拟合从点0到点14的线,并做了对于算法跳过的下一段相同,例如 7 个点,所以我适合从 14 到 22 等。有了这些最适合的线,我发现这些点是相交的线,或者如果线不相交,最近的点在每一行到另一行。由于我的问题的性质,我不需要我的数据是连续的,所以 2000 个“不连续”段不是问题。非常感谢您的帮助!


推荐阅读