我在3d中有一堆点(一个包含具有x,y,z属性的对象的数组)。
我的问题是有很多不必要的点,如下图所示:
(来源:lifesine.eu)
如何清理此路径?
目前首先想到的是
优势在于点以绘图顺序存储,因此使它们成为路径,而不仅仅是随机(未分类)点。
注意:我正在使用actionscript 3,但我可以理解其他语言或伪代码的语法。
谢谢!
答案 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)。