如何简化/优化3d路径?

时间:2009-08-30 03:24:34

标签: algorithm optimization path

我在3d中有一堆点(一个包含具有x,y,z属性的对象的数组)。

我的问题是有很多不必要的点,如下图所示:

3d path
(来源:lifesine.eu

如何清理此路径?

目前首先想到的是

  • 为优化创建一个数组 路径
  • 循环所有点开始 用索引1代替0,得到 路径的'方向'。如果 方向改变,添加最后一个 两点(当前,而不是 前一个)到优化的数组。

优势在于点以绘图顺序存储,因此使它们成为路径,而不仅仅是随机(未分类)点。

注意:我正在使用actionscript 3,但我可以理解其他语言或伪代码的语法。

谢谢!

4 个答案:

答案 0 :(得分:7)

答案 1 :(得分:1)

  

循环所有以索引1而不是0开头的点,然后获取路径的'方向'。如果方向发生变化,请将两个点中的最后一个(当前而不是前一个)添加到优化数组中。

如果您认为它会有所帮助,您应该认为地球是平坦的; - )

尝试这样做:如果路径稍微改变 ,则跳过每一秒,从而减少两倍的点数。如果路径明显,请保持节点不变。然后用“轻微的阈值的一半重复(你的长度加倍,所以你的灵敏度必须增加),直到你在跑步后没有做出任何改变。

答案 2 :(得分:0)

我会考虑你的建议,但在方向改变时保留当前的之前的点。

这样,你最终得到每个线段的第一个和最后一个点。

答案 3 :(得分: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)。