使用 python 的 3D 曲线拟合

3D curve fitting using python

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

我在 python 上这样做。

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

是否有任何内置函数可以执行此操作?

我试过使用 Ramer–Douglas–Peucker 算法来简化直线,但由于曲线的性质,对于忽略的每个数据点,最终的绘图都未达到。查看二维示例的图片,橙色是使用 rdp 产生的结果,绿色是我想要的。

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

感谢您的帮助

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

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