我正在试验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);问题是结果总是一个空的集合[]。
发布于 2013-12-23 22:36:13
在递归步骤中,您没有将子项添加到输出中。所以你只返回最底层的节点,它可能是空的。另外,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>
https://stackoverflow.com/questions/20741179
复制相似问题