Algorithm 如何简化/优化三维路径?
我在3d中有一堆点(一个包含具有x、y、z属性的对象的数组) 我的问题是,有许多不必要的点,如下图所示:Algorithm 如何简化/优化三维路径?,algorithm,optimization,path,Algorithm,Optimization,Path,我在3d中有一堆点(一个包含具有x、y、z属性的对象的数组) 我的问题是,有许多不必要的点,如下图所示: (来源:) 如何清理此路径 此刻,我想到的第一件事就是 为优化后的对象创建一个数组 路径 循环通过所有的点开始 使用索引1而不是0,并获取 路径的“方向”。如果 方向改变,添加最后一个 两点(电流,而不是电流 上一页)添加到优化的阵列 其优点是,这些点以图形顺序存储,从而使它们成为路径,而不仅仅是随机(未排序)点 注意:我使用的是ActionScript3,但我可以理解其他语言或伪代码
(来源:) 如何清理此路径 此刻,我想到的第一件事就是
- 为优化后的对象创建一个数组 路径
- 循环通过所有的点开始 使用索引1而不是0,并获取 路径的“方向”。如果 方向改变,添加最后一个 两点(电流,而不是电流 上一页)添加到优化的阵列
尝试以下方法:如果路径稍有变化,则每秒钟跳过一个点,从而以少两倍的点结束。如果路径发生明显变化,请保持节点不变。然后用“稍微”的一半阈值重复(你的长度增加了一倍,所以你的敏感度必须增加),直到你在跑步后不做任何改变。我同意你的建议,但在方向改变时保留当前和上一点
这样,您就可以得到每条线段的第一个和最后一个点。请查看我认为您最初的想法很好。我将添加/更改两件事: 1) 我会在你的算法中加入一个距离阈值:只有当当前测试点距离上一个“好”点的最小距离时,你才应该测试它。这取决于路径数据的来源(可能是磁跟踪器?),由于测量噪声,原始数据中可能无法很好地反映平稳性。这可能会在一个非常小的区域内导致相对较大的方向变化,而这些变化基本上没有意义
2) 当您检测到足够大的更改时,不要添加当前测试点(如您所建议的),而要添加上一个。否则,您可能会错误地表示路径。例如(2D中):由(0,0)->(1,0)->(2,0)->(3,0)->(4,0)->(5,5)组成的路径最终将变为(0,0)->(5,5)用你的方法,我不认为这是一个很好的路径表示。最好是(0, 0)->(4,0)->(5,5)。< / P>这看起来很有趣。我会尝试不同的方法,但到目前为止,这一个看起来最吸引人。我应该阅读平地,很快,我一直拖延。感谢地球平面参考;