org.jbox2d.collision.broadphase
Class DynamicTree

java.lang.Object
  extended by org.jbox2d.collision.broadphase.DynamicTree

public class DynamicTree
extends Object

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 b2_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

Field Summary
static int MAX_STACK_SIZE
           
 
Constructor Summary
DynamicTree()
           
 
Method Summary
 int computeHeight()
          Compute the height of the tree.
 DynamicTreeNode createProxy(AABB argAABB, Object argUserData)
          Create a proxy.
 void destroyProxy(DynamicTreeNode argProxy)
          Destroy a proxy
 void drawTree(DebugDraw argDraw)
           
 void drawTree(DebugDraw argDraw, DynamicTreeNode argNode, int spot, int height)
           
 boolean moveProxy(DynamicTreeNode argProxy, AABB argAABB, Vec2 displacement)
          Move a proxy with a swepted AABB.
 void query(TreeCallback argCallback, AABB argAABB)
          Query an AABB for overlapping proxies.
 boolean raycast(DynamicTreeNode argNode, RayCastInput argInput, int argCount, AABB argSegAABB, Vec2 argV, Vec2 argP1, Vec2 argP2, Vec2 argAbs_v, float[] argMaxFraction, TreeRayCastCallback argCallback)
           
 void raycast(TreeRayCastCallback argCallback, RayCastInput argInput)
          Ray-cast against the proxies in the tree.
 void rebalance(int argIterations)
          Rebalances the tree for the given iterations.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MAX_STACK_SIZE

public static final int MAX_STACK_SIZE
See Also:
Constant Field Values
Constructor Detail

DynamicTree

public DynamicTree()
Method Detail

createProxy

public final DynamicTreeNode createProxy(AABB argAABB,
                                         Object argUserData)
Create a proxy. Provide a tight fitting AABB and a userData pointer.

Parameters:
argAABB -
userData -
Returns:

destroyProxy

public final void destroyProxy(DynamicTreeNode argProxy)
Destroy a proxy

Parameters:
argProxy -

moveProxy

public final boolean moveProxy(DynamicTreeNode argProxy,
                               AABB argAABB,
                               Vec2 displacement)
Move 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.

Returns:
true if the proxy was re-inserted.

rebalance

public final void rebalance(int argIterations)
Rebalances the tree for the given iterations. Goes through the tree by child1-child2 order (then back to root). If given enough iterations it will hit all the nodes. It starts off at the last leaf that it reinserted.

Parameters:
argIterations -

query

public final void query(TreeCallback argCallback,
                        AABB argAABB)
Query an AABB for overlapping proxies. The callback class is called for each proxy that overlaps the supplied AABB.

Parameters:
argCallback -
argAABB -

raycast

public void raycast(TreeRayCastCallback argCallback,
                    RayCastInput argInput)
Ray-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.

Parameters:
argInput - the ray-cast input data. The ray extends from p1 to p1 + maxFraction * (p2 - p1).
argCallback - a callback class that is called for each proxy that is hit by the ray.

raycast

public boolean raycast(DynamicTreeNode argNode,
                       RayCastInput argInput,
                       int argCount,
                       AABB argSegAABB,
                       Vec2 argV,
                       Vec2 argP1,
                       Vec2 argP2,
                       Vec2 argAbs_v,
                       float[] argMaxFraction,
                       TreeRayCastCallback argCallback)

computeHeight

public final int computeHeight()
Compute the height of the tree.


drawTree

public void drawTree(DebugDraw argDraw)

drawTree

public void drawTree(DebugDraw argDraw,
                     DynamicTreeNode argNode,
                     int spot,
                     int height)


Copyright © 2011. All Rights Reserved.