使用python进行3D曲线拟合

时间:2018-08-08 09:39:51

标签: python curve-fitting spline

我正在尝试减少3D曲线的数据点数量,目前我有20000个点,并且我希望将其减少到2000个左右而又不会丢失太多信息。

我正在python上执行此操作。

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

是否有任何内置功能可以做到这一点?

我尝试使用Ramer–Douglas–Peucker算法来简化直线,但是由于曲线的性质,对于每个数据点,忽略的最终图将不足。看到2D示例的图片,橙色是使用rdp生成的东西,绿色是我想要的。

enter image description here

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

谢谢您的帮助

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

1 个答案:

答案 0 :(得分:0)

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