我有两个对象列表;我想对给定的list 2对象执行操作,只要它在当前list 1对象的边界内。
这样的事情:
for k=1:size(object_list1)
for l=1:size(object_list2)
if euclideanDstSqt(object_list1(k).centroid,object_list2(l).centroid) < toleranceRadius then
// do something ...
end
end
end
这有什么问题,我每次都会检查距离,即使对于彼此相距很远的物体也是如此。是否有一种算法更智能的方法来做到这一点?某种树可能吗?
然后可以将此算法翻译成C ++,因此我不得不忘记所有面向矩阵的Matlab技巧。
答案 0 :(得分:1)
可能将列表2中的对象放入k-d tree,然后放入列表1中的对象,继续寻找最近邻居,直到到下一个邻居的距离超出边界。
答案 1 :(得分:0)
我可能会说你总是需要计算距离。唯一的解决方案是对点进行空间排序,或进行某种预计算。例如,创建一个空间网格,并丢弃属于同一象限的所有点,而不是任何一个点。