[使用python进行3D曲线拟合

问题描述 投票:1回答:1

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

我正在python上执行此操作。

作为一个简单的例子,考虑一下圆柱体表面上的螺旋。

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

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

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9Nb1BIRy5wbmcifQ==” alt =“在此处输入图像描述”>

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

谢谢您的帮助

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

python curve-fitting spline
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.