Class DynamicTree
java.lang.Object
org.jbox2d.collision.broadphase.DynamicTree
- All Implemented Interfaces:
BroadPhaseStrategy
A dynamic tree arranges data in a binary tree to accelerate queries such as volume queries and
ray casts. Leafs are proxies with an AABB. In the tree we expand the proxy AABB by _fatAABBFactor
so that the proxy AABB is bigger than the client object. This allows the client object to move by
small amounts without triggering a tree update.
- Author:
- daniel
-
Nested Class Summary
Nested Classes -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionfinal intCompute the height of the tree.final intcreateProxy(AABB aabb, Object userData) Create a proxy.final voiddestroyProxy(int proxyId) Destroy a proxyvoidvoiddrawTree(DebugDraw argDraw, DynamicTreeNode node, int spot, int height) floatGet the ratio of the sum of the node areas to the root area.final AABBgetFatAABB(int proxyId) intCompute the height of the binary tree in O(N) time.intintGet the maximum balance of an node in the tree.final ObjectgetUserData(int proxyId) final booleanMove a proxy with a swepted AABB.final voidquery(TreeCallback callback, AABB aabb) Query an AABB for overlapping proxies.voidraycast(TreeRayCastCallback callback, RayCastInput input) Ray-cast against the proxies in the tree.voidBuild an optimal tree.voidvalidate()Validate this tree.
-
Field Details
-
MAX_STACK_SIZE
public static final int MAX_STACK_SIZE- See Also:
-
NULL_NODE
public static final int NULL_NODE- See Also:
-
-
Constructor Details
-
DynamicTree
public DynamicTree()
-
-
Method Details
-
createProxy
Description copied from interface:BroadPhaseStrategyCreate a proxy. Provide a tight fitting AABB and a userData pointer.- Specified by:
createProxyin interfaceBroadPhaseStrategy- Parameters:
aabb-userData-- Returns:
-
destroyProxy
public final void destroyProxy(int proxyId) Description copied from interface:BroadPhaseStrategyDestroy a proxy- Specified by:
destroyProxyin interfaceBroadPhaseStrategy- Parameters:
proxyId-
-
moveProxy
Description copied from interface:BroadPhaseStrategyMove a proxy with a swepted AABB. If the proxy has moved outside of its fattened AABB, then the proxy is removed from the tree and re-inserted. Otherwise the function returns immediately.- Specified by:
moveProxyin interfaceBroadPhaseStrategy- Returns:
- true if the proxy was re-inserted.
-
getUserData
- Specified by:
getUserDatain interfaceBroadPhaseStrategy
-
getFatAABB
- Specified by:
getFatAABBin interfaceBroadPhaseStrategy
-
query
Description copied from interface:BroadPhaseStrategyQuery an AABB for overlapping proxies. The callback class is called for each proxy that overlaps the supplied AABB.- Specified by:
queryin interfaceBroadPhaseStrategy- Parameters:
callback-
-
raycast
Description copied from interface:BroadPhaseStrategyRay-cast against the proxies in the tree. This relies on the callback to perform a exact ray-cast in the case were the proxy contains a shape. The callback also performs the any collision filtering. This has performance roughly equal to k * log(n), where k is the number of collisions and n is the number of proxies in the tree.- Specified by:
raycastin interfaceBroadPhaseStrategy- Parameters:
callback- a callback class that is called for each proxy that is hit by the ray.input- the ray-cast input data. The ray extends from p1 to p1 + maxFraction * (p2 - p1).
-
computeHeight
public final int computeHeight()Description copied from interface:BroadPhaseStrategyCompute the height of the tree.- Specified by:
computeHeightin interfaceBroadPhaseStrategy
-
validate
public void validate()Validate this tree. For testing. -
getHeight
public int getHeight()Description copied from interface:BroadPhaseStrategyCompute the height of the binary tree in O(N) time. Should not be called often.- Specified by:
getHeightin interfaceBroadPhaseStrategy- Returns:
-
getMaxBalance
public int getMaxBalance()Description copied from interface:BroadPhaseStrategyGet the maximum balance of an node in the tree. The balance is the difference in height of the two children of a node.- Specified by:
getMaxBalancein interfaceBroadPhaseStrategy- Returns:
-
getAreaRatio
public float getAreaRatio()Description copied from interface:BroadPhaseStrategyGet the ratio of the sum of the node areas to the root area.- Specified by:
getAreaRatioin interfaceBroadPhaseStrategy- Returns:
-
rebuildBottomUp
public void rebuildBottomUp()Build an optimal tree. Very expensive. For testing. -
getInsertionCount
public int getInsertionCount()- Specified by:
getInsertionCountin interfaceBroadPhaseStrategy
-
drawTree
- Specified by:
drawTreein interfaceBroadPhaseStrategy
-
drawTree
-