python - 使用python进行3D曲线拟合
问题描述
我正在尝试减少 3D 曲线的数据点数量,目前我有 20000 个点,我想在不丢失太多信息的情况下将其减少到 2000 个左右。
我在 python 上这样做。
举个简单的例子,想想圆柱体表面的螺旋。
是否有任何内置函数可以做到这一点?
我尝试使用 Ramer–Douglas–Peucker 算法来简化线条,但由于曲线的性质,对于每个忽略的数据点,最终图都低于。看一个 2D 例子的图片,橙色是使用 rdp 产生的,绿色是我想要的。
我希望程序的输出是一个约 2000 个坐标的数组,它们仍然代表 3D 曲线的形状,但它们不一定是原始坐标,我希望一些点过冲而其他点下冲。
谢谢您的帮助
更新:最后我选择做一些非常复杂的事情,但给了我我想要的东西。我开始使用 rdp 算法来减少点数。有了这些新信息,我将一条最适合的直线拟合到新减少点之间的原始点的分布:即如果算法“忽略”13 个点,我拟合从点 0 到点 14 的线,并做了对于算法跳过的下一段相同,例如 7 个点,所以我适合从 14 到 22 等。有了这些最适合的线,我发现这些点是相交的线,或者如果线不相交,最近的点在每一行到另一行。由于我的问题的性质,我不需要我的数据是连续的,所以 2000 个“不连续”段不是问题。非常感谢您的帮助!
解决方案
最后我选择了做一些相当投入的事情,但给了我我想要的东西。我开始使用 rdp 算法来减少点数。有了这个新信息,我将一条最适合的直线拟合到新的减少点之间的原始点的分布:即如果算法“忽略”13个点,我拟合从点0到点14的线,并做了对于算法跳过的下一段相同,例如 7 个点,所以我适合从 14 到 22 等。有了这些最适合的线,我发现这些点是相交的线,或者如果线不相交,最近的点在每一行到另一行。由于我的问题的性质,我不需要我的数据是连续的,所以 2000 个“不连续”段不是问题。非常感谢您的帮助!
推荐阅读
- haskell - 你能写一个类型函数来反转约束吗?
- javascript - 模块范围变量拒绝被异步函数覆盖。为什么?
- java - Java BigInteger 类中的“hybridGCD”方法有什么作用?
- json - 预计解码字典
但找到了一个号码 - javascript - 不要为同一个输入多次调用 AJAX
- excel - 有没有办法使用 VBA 将给定的月份分成 4 周?
- matplotlib - Word 在 TSNE 图中出现了不止一次
- swift - 在 Swift 中改变 SceneKit 的环境混响?
- java - 处理文件大小在 kbs 到 100 GB 之间的 100 万个文本文件
- javascript - AWS - Lambda 函数不等待等待