我正在使用QuadTree classQuadTreeNode 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/

10-11 07:31