public class QuadTree<ElementType extends QuadTreeElement<ElementType>> extends java.lang.Object implements WorldSpace<ElementType>
Constructor and Description |
---|
QuadTree(Geometry g) |
QuadTree(Geometry g,
int hysteresis) |
Modifier and Type | Method and Description |
---|---|
void |
addElement(ElementType elem) |
protected QuadTreeNode<ElementType> |
addElementInternal(ElementType elem,
Point loc,
NewsAndFrees newsAndFrees) |
java.lang.Integer |
addElementReturnCountForPerceiver(ElementType elem,
OID mobilePerceiverOid)
If the perceiverOid is non-null, the count returned is the
count of the number of news plus number of frees for the
perceiver as a result of adding elem to the quadtree; else
null
|
protected QuadTreeNode<ElementType> |
addHelper(QuadTreeNode<ElementType> node,
ElementType elem,
Point loc,
NewsAndFrees newsAndFrees) |
java.util.Collection<ElementType> |
getElementPerceivables(ElementType elem) |
java.util.Set<ElementType> |
getElements(Point loc,
int radius) |
java.util.Set<ElementType> |
getElementsBetween(Point loc1,
Point loc2) |
int |
getHysteresis() |
Geometry |
getLocalGeometry() |
java.util.concurrent.locks.Lock |
getLock() |
int |
getMaxDepth() |
int |
getMaxLeafDimension() |
int |
getMaxObjects() |
boolean |
removeElement(ElementType elem) |
protected boolean |
removeElementInternal(ElementType elem,
NewsAndFrees newsAndFrees) |
java.lang.Integer |
removeElementReturnCountForPerceiver(ElementType elem,
OID mobilePerceiverOid)
If the perceiverOid is non-null, the count returned is the
count of the number of news plus number of frees for the
perceiver as a result of adding elem to the quadtree; else
null
|
void |
setHysteresis(int hysteresis) |
void |
setMaxDepth(int max) |
void |
setMaxLeafDimension(int max) |
void |
setMaxObjects(int max) |
void |
updateElement(ElementType elem,
Point loc)
Moves elem to the right place in the quadtree if its position has changed.
|
protected void |
updateElementInternal(ElementType elem,
Point loc,
NewsAndFrees newsAndFrees) |
protected void |
updateElementPerceiversInternal(ElementType elem,
Point loc,
QuadTreeNode<ElementType> oldNode,
QuadTreeNode<ElementType> newNode,
NewsAndFrees newsAndFrees)
Notify all perceivers that can now see, or can no longer see the specified object (elem)
|
void |
updatePerceiver(ElementType elem) |
protected void |
updatePerceiverHelper(java.util.Set<QuadTreeNode<ElementType>> nodeSet,
QuadTreeNode<ElementType> node,
Perceiver<ElementType> perceiver)
Adds all nodes to nodeSet in or under
'node' that the passed in perceiver overlaps with.
|
protected void |
updatePerceiverInternal(Perceiver<ElementType> perceiver,
NewsAndFrees newsAndFrees)
Notify the object's perceiver about what they can see/not see.
|
protected static final Logger log
public QuadTree(Geometry g)
public QuadTree(Geometry g, int hysteresis)
public java.util.Set<ElementType> getElements(Point loc, int radius)
public java.util.Set<ElementType> getElementsBetween(Point loc1, Point loc2)
public Geometry getLocalGeometry()
getLocalGeometry
in interface WorldSpace<ElementType extends QuadTreeElement<ElementType>>
public void setMaxObjects(int max)
public int getMaxObjects()
public void setMaxDepth(int max)
public int getMaxDepth()
public int getMaxLeafDimension()
public void setMaxLeafDimension(int max)
public java.util.concurrent.locks.Lock getLock()
public int getHysteresis()
public void setHysteresis(int hysteresis)
public void addElement(ElementType elem)
addElement
in interface WorldSpace<ElementType extends QuadTreeElement<ElementType>>
public java.lang.Integer addElementReturnCountForPerceiver(ElementType elem, OID mobilePerceiverOid)
addElementReturnCountForPerceiver
in interface WorldSpace<ElementType extends QuadTreeElement<ElementType>>
public boolean removeElement(ElementType elem)
removeElement
in interface WorldSpace<ElementType extends QuadTreeElement<ElementType>>
public java.lang.Integer removeElementReturnCountForPerceiver(ElementType elem, OID mobilePerceiverOid)
public void updateElement(ElementType elem, Point loc)
updateElement
in interface WorldSpace<ElementType extends QuadTreeElement<ElementType>>
elem
- loc
- public void updatePerceiver(ElementType elem)
updatePerceiver
in interface WorldSpace<ElementType extends QuadTreeElement<ElementType>>
public java.util.Collection<ElementType> getElementPerceivables(ElementType elem)
getElementPerceivables
in interface WorldSpace<ElementType extends QuadTreeElement<ElementType>>
protected QuadTreeNode<ElementType> addElementInternal(ElementType elem, Point loc, NewsAndFrees newsAndFrees)
protected QuadTreeNode<ElementType> addHelper(QuadTreeNode<ElementType> node, ElementType elem, Point loc, NewsAndFrees newsAndFrees)
protected boolean removeElementInternal(ElementType elem, NewsAndFrees newsAndFrees)
protected void updateElementInternal(ElementType elem, Point loc, NewsAndFrees newsAndFrees)
protected void updateElementPerceiversInternal(ElementType elem, Point loc, QuadTreeNode<ElementType> oldNode, QuadTreeNode<ElementType> newNode, NewsAndFrees newsAndFrees)
elem:
- the element that is movingoldNode:
- the node the element has leftnewNode:
- the node the element has enterednewsAndFrees
- protected void updatePerceiverInternal(Perceiver<ElementType> perceiver, NewsAndFrees newsAndFrees)
perceiver
- newsAndFrees
- protected void updatePerceiverHelper(java.util.Set<QuadTreeNode<ElementType>> nodeSet, QuadTreeNode<ElementType> node, Perceiver<ElementType> perceiver)
nodeSet
- node
- perceiver
-