我正在尝试使用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);
问题是结果总是空集[]
。
答案 0 :(得分:1)
您不是在递归步骤中将子项添加到输出中。所以你只返回最底层节点,这可能是空的。另外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>