public class ConcurrentPointQuadTree<T extends Positionable> extends Rectangle implements QuadTree<T>
Modifier and Type | Field and Description |
---|---|
protected ConcurrentPointQuadTree<T> |
bottomLeft |
protected ConcurrentPointQuadTree<T> |
bottomRight |
static Color |
ELEMENT_COLOR |
protected int |
elementLimitPerQuad |
protected org.mini2Dx.gdx.utils.Array<T> |
elements |
protected java.util.concurrent.locks.ReadWriteLock |
lock |
protected int |
mergeWatermark |
protected float |
minimumQuadHeight |
protected float |
minimumQuadWidth |
protected ConcurrentPointQuadTree<T> |
parent |
static Color |
QUAD_COLOR |
protected ConcurrentPointQuadTree<T> |
topLeft |
protected ConcurrentPointQuadTree<T> |
topRight |
protected int |
totalElementsCache |
protected int |
totalMerges |
geometry, positionChangeListeners, sizeChangeListeners
Constructor and Description |
---|
ConcurrentPointQuadTree(ConcurrentPointQuadTree<T> parent,
float x,
float y,
float width,
float height)
Constructs a
ConcurrentPointQuadTree as a child of another
ConcurrentPointQuadTree |
ConcurrentPointQuadTree(float minimumQuadWidth,
float minimumQuadHeight,
int elementLimitPerQuad,
int mergeWatermark,
float x,
float y,
float width,
float height)
Constructs a
ConcurrentPointQuadTree with a specified minimum
quad size, element limit and watermark |
ConcurrentPointQuadTree(int elementLimitPerQuad,
float x,
float y,
float width,
float height)
Constructs a
ConcurrentPointQuadTree with a specified element
limit and no merging watermark. |
ConcurrentPointQuadTree(int elementLimitPerQuad,
int mergeWatermark,
float x,
float y,
float width,
float height)
Constructs a
ConcurrentPointQuadTree with a specified element
limit and watermark |
Modifier and Type | Method and Description |
---|---|
boolean |
add(T element)
Adds an element to this
QuadTree |
void |
addAll(org.mini2Dx.gdx.utils.Array<T> elementsToAdd)
Adds all element to this
QuadTree . |
protected boolean |
addElement(T element) |
protected void |
addElementsContainingPoint(org.mini2Dx.gdx.utils.Array<T> result,
Point point) |
protected void |
addElementsIntersectingLineSegment(org.mini2Dx.gdx.utils.Array<T> result,
LineSegment lineSegment) |
protected void |
addElementsWithinArea(org.mini2Dx.gdx.utils.Array<T> result,
Shape area) |
protected boolean |
addElementToChild(T element) |
void |
clear()
Same a
QuadTree.removeAll(Array) except the results are not stored |
protected void |
clearTotalElementsCache() |
void |
debugRender(Graphics g) |
int |
getElementLimitPerQuad() |
org.mini2Dx.gdx.utils.Array<T> |
getElements() |
void |
getElements(org.mini2Dx.gdx.utils.Array<T> result) |
void |
getElementsContainingPoint(org.mini2Dx.gdx.utils.Array<T> result,
Point point) |
void |
getElementsContainingPoint(org.mini2Dx.gdx.utils.Array<T> result,
Point point,
QuadTreeSearchDirection searchDirection) |
org.mini2Dx.gdx.utils.Array<T> |
getElementsContainingPoint(Point point) |
org.mini2Dx.gdx.utils.Array<T> |
getElementsContainingPoint(Point point,
QuadTreeSearchDirection searchDirection) |
void |
getElementsIntersectingLineSegment(org.mini2Dx.gdx.utils.Array<T> result,
LineSegment lineSegment) |
void |
getElementsIntersectingLineSegment(org.mini2Dx.gdx.utils.Array<T> result,
LineSegment lineSegment,
QuadTreeSearchDirection searchDirection) |
org.mini2Dx.gdx.utils.Array<T> |
getElementsIntersectingLineSegment(LineSegment lineSegment) |
org.mini2Dx.gdx.utils.Array<T> |
getElementsIntersectingLineSegment(LineSegment lineSegment,
QuadTreeSearchDirection searchDirection) |
void |
getElementsWithinArea(org.mini2Dx.gdx.utils.Array<T> result,
Shape area) |
void |
getElementsWithinArea(org.mini2Dx.gdx.utils.Array<T> result,
Shape area,
QuadTreeSearchDirection searchDirection) |
org.mini2Dx.gdx.utils.Array<T> |
getElementsWithinArea(Shape area) |
org.mini2Dx.gdx.utils.Array<T> |
getElementsWithinArea(Shape area,
QuadTreeSearchDirection searchDirection) |
int |
getMergeWatermark() |
float |
getMinimumQuadHeight() |
float |
getMinimumQuadWidth() |
QuadTree<T> |
getParent() |
int |
getTotalElements() |
int |
getTotalMergeOperations() |
int |
getTotalQuads() |
protected static boolean |
intersects(ConcurrentPointQuadTree tree,
LineSegment segment) |
protected boolean |
isMergable() |
protected void |
merge() |
void |
positionChanged(T moved) |
boolean |
remove(T element)
Removes an element from this
QuadTree |
void |
removeAll(org.mini2Dx.gdx.utils.Array<T> elementsToRemove)
Removes all elements in this
QuadTree and stores them in an Array |
protected boolean |
removeElement(T element,
boolean topDownInvocation) |
protected boolean |
removeElementFromChild(T element) |
protected void |
subdivide() |
contains, contains, contains, contains, contains, copy, dispose, draw, edgeIterator, equals, fill, getCenterX, getCenterY, getDistanceTo, getHeight, getMaxX, getMaxY, getMinX, getMinY, getNumberOfSides, getPolygon, getRotation, getVertices, getWidth, getX, getY, hashCode, intersection, intersects, intersects, intersects, intersects, intersects, intersects, intersectsLineSegment, intersectsLineSegment, isCircle, lerp, rotate, rotateAround, scale, set, set, setCenter, setCenterX, setCenterY, setHeight, setRadius, setRotation, setRotationAround, setSize, setSize, setWidth, setX, setXY, setXY, setY, toString, translate
add, addPostionChangeListener, addSizeChangeListener, clearPositionChangeListeners, clearPositionListeners, clearPositionListeners, clearSizeChangeListeners, clearSizeListeners, clearSizeListeners, getDistanceTo, intersects, moveTowards, moveTowards, notifyPositionChangeListeners, notifyPositionListeners, notifyPositionListeners, notifySizeChangeListeners, notifySizeListeners, notifySizeListeners, removePositionChangeListener, removePositionListener, removePositionListener, removeSizeChangeListener, removeSizeListener, removeSizeListener, setRotationAround, subtract
public static Color QUAD_COLOR
public static Color ELEMENT_COLOR
protected ConcurrentPointQuadTree<T extends Positionable> parent
protected ConcurrentPointQuadTree<T extends Positionable> topLeft
protected ConcurrentPointQuadTree<T extends Positionable> topRight
protected ConcurrentPointQuadTree<T extends Positionable> bottomLeft
protected ConcurrentPointQuadTree<T extends Positionable> bottomRight
protected org.mini2Dx.gdx.utils.Array<T extends Positionable> elements
protected final int elementLimitPerQuad
protected final int mergeWatermark
protected final float minimumQuadWidth
protected final float minimumQuadHeight
protected final java.util.concurrent.locks.ReadWriteLock lock
protected int totalElementsCache
protected int totalMerges
public ConcurrentPointQuadTree(int elementLimitPerQuad, float x, float y, float width, float height)
ConcurrentPointQuadTree
with a specified element
limit and no merging watermark. As elements are removed, small sized
child ConcurrentPointQuadTree
s will not be merged back together.elementLimitPerQuad
- The maximum number of elements in a quad before it is split
into 4 child ConcurrentPointQuadTree
sx
- The x coordinate of the ConcurrentPointQuadTree
y
- The y coordiante of the ConcurrentPointQuadTree
width
- The width of the ConcurrentPointQuadTree
height
- The height of the ConcurrentPointQuadTree
public ConcurrentPointQuadTree(ConcurrentPointQuadTree<T> parent, float x, float y, float width, float height)
ConcurrentPointQuadTree
as a child of another
ConcurrentPointQuadTree
parent
- The parent ConcurrentPointQuadTree
x
- The x coordinate of the ConcurrentPointQuadTree
y
- The y coordiante of the ConcurrentPointQuadTree
width
- The width of the ConcurrentPointQuadTree
height
- The height of the ConcurrentPointQuadTree
public ConcurrentPointQuadTree(int elementLimitPerQuad, int mergeWatermark, float x, float y, float width, float height)
ConcurrentPointQuadTree
with a specified element
limit and watermarkelementLimitPerQuad
- The maximum number of elements in a quad before it is split
into 4 child ConcurrentPointQuadTree
smergeWatermark
- When a parent ConcurrentPointQuadTree
's total elements
go lower than this mark, the child
ConcurrentPointQuadTree
s will be merged back togetherx
- The x coordinate of the ConcurrentPointQuadTree
y
- The y coordiante of the ConcurrentPointQuadTree
width
- The width of the ConcurrentPointQuadTree
height
- The height of the ConcurrentPointQuadTree
public ConcurrentPointQuadTree(float minimumQuadWidth, float minimumQuadHeight, int elementLimitPerQuad, int mergeWatermark, float x, float y, float width, float height)
ConcurrentPointQuadTree
with a specified minimum
quad size, element limit and watermarkminimumQuadWidth
- The minimum width of quads. Quads will not subdivide smaller
than this width.minimumQuadHeight
- The minimum height of quads. Quads will not subdivide smaller
than this height.elementLimitPerQuad
- The maximum number of elements in a quad before it is split
into 4 child ConcurrentPointQuadTree
smergeWatermark
- When a parent ConcurrentPointQuadTree
's total elements
go lower than this mark, the child
ConcurrentPointQuadTree
s will be merged back togetherx
- The x coordinate of the ConcurrentPointQuadTree
y
- The y coordiante of the ConcurrentPointQuadTree
width
- The width of the ConcurrentPointQuadTree
height
- The height of the ConcurrentPointQuadTree
public void debugRender(Graphics g)
debugRender
in interface QuadTree<T extends Positionable>
public void addAll(org.mini2Dx.gdx.utils.Array<T> elementsToAdd)
QuadTree
QuadTree
. Note that if an element exists outside of this QuadTree's bounds, it will not be addedaddAll
in interface QuadTree<T extends Positionable>
elementsToAdd
- The elements to addpublic boolean add(T element)
QuadTree
QuadTree
add
in interface QuadTree<T extends Positionable>
element
- The element to addprotected boolean addElement(T element)
protected boolean addElementToChild(T element)
protected void subdivide()
protected boolean isMergable()
protected void merge()
public void removeAll(org.mini2Dx.gdx.utils.Array<T> elementsToRemove)
QuadTree
QuadTree
and stores them in an Array
removeAll
in interface QuadTree<T extends Positionable>
elementsToRemove
- After executing, this Array
will contain all the removed elementspublic void clear()
QuadTree
QuadTree.removeAll(Array)
except the results are not storedclear
in interface QuadTree<T extends Positionable>
public boolean remove(T element)
QuadTree
QuadTree
remove
in interface QuadTree<T extends Positionable>
element
- The element to removeprotected boolean removeElementFromChild(T element)
protected boolean removeElement(T element, boolean topDownInvocation)
public org.mini2Dx.gdx.utils.Array<T> getElementsWithinArea(Shape area)
getElementsWithinArea
in interface QuadTree<T extends Positionable>
public org.mini2Dx.gdx.utils.Array<T> getElementsWithinArea(Shape area, QuadTreeSearchDirection searchDirection)
getElementsWithinArea
in interface QuadTree<T extends Positionable>
protected void addElementsWithinArea(org.mini2Dx.gdx.utils.Array<T> result, Shape area)
public void getElementsWithinArea(org.mini2Dx.gdx.utils.Array<T> result, Shape area)
getElementsWithinArea
in interface QuadTree<T extends Positionable>
public void getElementsWithinArea(org.mini2Dx.gdx.utils.Array<T> result, Shape area, QuadTreeSearchDirection searchDirection)
getElementsWithinArea
in interface QuadTree<T extends Positionable>
public org.mini2Dx.gdx.utils.Array<T> getElementsContainingPoint(Point point)
getElementsContainingPoint
in interface QuadTree<T extends Positionable>
public org.mini2Dx.gdx.utils.Array<T> getElementsContainingPoint(Point point, QuadTreeSearchDirection searchDirection)
getElementsContainingPoint
in interface QuadTree<T extends Positionable>
public void getElementsContainingPoint(org.mini2Dx.gdx.utils.Array<T> result, Point point)
getElementsContainingPoint
in interface QuadTree<T extends Positionable>
protected void addElementsContainingPoint(org.mini2Dx.gdx.utils.Array<T> result, Point point)
public void getElementsContainingPoint(org.mini2Dx.gdx.utils.Array<T> result, Point point, QuadTreeSearchDirection searchDirection)
getElementsContainingPoint
in interface QuadTree<T extends Positionable>
public org.mini2Dx.gdx.utils.Array<T> getElementsIntersectingLineSegment(LineSegment lineSegment)
getElementsIntersectingLineSegment
in interface QuadTree<T extends Positionable>
public org.mini2Dx.gdx.utils.Array<T> getElementsIntersectingLineSegment(LineSegment lineSegment, QuadTreeSearchDirection searchDirection)
getElementsIntersectingLineSegment
in interface QuadTree<T extends Positionable>
protected static boolean intersects(ConcurrentPointQuadTree tree, LineSegment segment)
protected void addElementsIntersectingLineSegment(org.mini2Dx.gdx.utils.Array<T> result, LineSegment lineSegment)
public void getElementsIntersectingLineSegment(org.mini2Dx.gdx.utils.Array<T> result, LineSegment lineSegment)
getElementsIntersectingLineSegment
in interface QuadTree<T extends Positionable>
public void getElementsIntersectingLineSegment(org.mini2Dx.gdx.utils.Array<T> result, LineSegment lineSegment, QuadTreeSearchDirection searchDirection)
getElementsIntersectingLineSegment
in interface QuadTree<T extends Positionable>
public org.mini2Dx.gdx.utils.Array<T> getElements()
getElements
in interface QuadTree<T extends Positionable>
public void getElements(org.mini2Dx.gdx.utils.Array<T> result)
getElements
in interface QuadTree<T extends Positionable>
public int getTotalQuads()
getTotalQuads
in interface QuadTree<T extends Positionable>
public int getTotalElements()
getTotalElements
in interface QuadTree<T extends Positionable>
protected void clearTotalElementsCache()
public void positionChanged(T moved)
positionChanged
in interface PositionChangeListener<T extends Positionable>
public QuadTree<T> getParent()
getParent
in interface QuadTree<T extends Positionable>
public int getTotalMergeOperations()
public int getElementLimitPerQuad()
public int getMergeWatermark()
public float getMinimumQuadWidth()
getMinimumQuadWidth
in interface QuadTree<T extends Positionable>
public float getMinimumQuadHeight()
getMinimumQuadHeight
in interface QuadTree<T extends Positionable>