首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从QuadTree中提取元素

从QuadTree中提取元素
EN

Stack Overflow用户
提问于 2013-12-23 18:06:10
回答 1查看 166关注 0票数 0

我正在试验QuadTree classQuadTreeNode class。我的问题如下。一旦我将元素放入QuadTree,有没有办法根据它们的地理位置(即西北、东北、西南和东南)提取这些元素,而不定义边界框?

这就是我到目前为止所做的。在QuadTree类中,我引入了函数getChildren

代码语言:javascript
复制
public Vector<E> getChildren(int loc)
{   
    return top.getChildren(loc);
}

在QuadTreeNode类中,我介绍了以下内容:

代码语言:javascript
复制
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,并尝试根据元素的地理位置获取元素。

代码语言:javascript
复制
_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);

问题是结果总是一个空的集合[]

EN

回答 1

Stack Overflow用户

发布于 2013-12-23 22:36:13

在递归步骤中,您没有将子项添加到输出中。所以你只返回最底层的节点,它可能是空的。另外,getItems()是如何定义的?

以下是针对节点类的经过测试的修复:

代码语言:javascript
复制
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>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20741179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档