Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何简化/优化三维路径?_Algorithm_Optimization_Path - Fatal编程技术网

Algorithm 如何简化/优化三维路径?

Algorithm 如何简化/优化三维路径?,algorithm,optimization,path,Algorithm,Optimization,Path,我在3d中有一堆点(一个包含具有x、y、z属性的对象的数组) 我的问题是,有许多不必要的点,如下图所示: (来源:) 如何清理此路径 此刻,我想到的第一件事就是 为优化后的对象创建一个数组 路径 循环通过所有的点开始 使用索引1而不是0,并获取 路径的“方向”。如果 方向改变,添加最后一个 两点(电流,而不是电流 上一页)添加到优化的阵列 其优点是,这些点以图形顺序存储,从而使它们成为路径,而不仅仅是随机(未排序)点 注意:我使用的是ActionScript3,但我可以理解其他语言或伪代码

我在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>这看起来很有趣。我会尝试不同的方法,但到目前为止,这一个看起来最吸引人。我应该阅读平地,很快,我一直拖延。感谢地球平面参考;