2013-12-23 46 views
0

我正在試驗QuadTree classQuadTreeNode class。我的問題如下。一旦我將元素放到QuadTree中,是否有任何方法根據它們的地理位置(即西北,東北,西南和東南)來提取這些元素,而沒有定義邊界框?QuadTree提取元素

這是我到目前爲止所做的。四叉樹中I類推出的功能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(); 
} 

然後創建了一個四叉樹,並試圖根據它們的地理位置,以獲得元素。

_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); 

問題是結果總是空集[]

回答

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>

+0

感謝。 getItems()是這樣定義的:\t public Vector getItems(){ \t \t return _items; \t} –

+0

如果它解決了您的問題,請將其標記爲已回答。 –