我正在使用QuadTree class和QuadTreeNode class。我的问题如下。将元素放入QuadTree后,是否有任何方法可以根据其地理位置(即西北,东北,西南和东南)提取这些元素,而无需定义边界框?
这是我到目前为止所做的。在QuadTree类中,我介绍了功能getChildren
:
public Vector<E> getChildren(int loc)
{
return top.getChildren(loc);
}
在类QuadTreeNode中,我介绍了这一点:
public Vector<E> getChildren(int loc)
{
if (loc == 0)
return _children[NORTHWEST].getItems();
else if (loc == 1)
return _children[NORTHEAST].getItems();
else if (loc == 2)
return _children[SOUTHEAST].getItems();
else
return _children[SOUTHWEST].getItems();
}
然后,我创建了一个QuadTree,并尝试根据其地理位置获取元素。
_Qtree = new ITSQtree<Obj>();
for(Obj o : Objs )
_Qtree.put(o);
List<Obj> childrenNORTHWEST = _Qtree.getChildren(0);
List<Obj> childrenNORTHEAST = _Qtree.getChildren(1);
List<Obj> childrenSOUTHEAST = _Qtree.getChildren(2);
List<Obj> childrenSOUTWEST = _Qtree.getChildren(3);
问题在于结果始终是空集
[]
。 最佳答案
您没有在递归步骤中将子代添加到输出中。因此,您只返回最底端的节点,该节点可能为空。还如何定义getItems()
?
这是针对节点类的经过测试的修复程序:
public Vector<E> getChildren(int loc) {
Vector<E> list = new Vector<E>();
getChildren(loc, list);
return list;
}
private Vector<E> getChildren(int loc, Vector<E> list) {
list.addAll(_items);
return _children[loc].getChildren(loc, list);
}
另外,您可能希望使类通用,即
public class QuadTree<T>
和public class QuadTreeNode<T>
关于java - 从QuadTree中提取元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20741179/