toxi.physics2d
Class VerletPhysics2D

java.lang.Object
  extended by toxi.physics2d.VerletPhysics2D

public class VerletPhysics2D
extends java.lang.Object

3D particle physics engine using Verlet integration based on: http://en.wikipedia.org/wiki/Verlet_integration http://www.teknikus.dk/tj/gdc2001.htm


Field Summary
 java.util.List<ParticleBehavior2D> behaviors
           
 java.util.ArrayList<VerletParticle2D> particles
          List of particles
 java.util.ArrayList<VerletSpring2D> springs
          List of spring/stick connectors
 
Constructor Summary
VerletPhysics2D()
          Initializes a Verlet engine instance using the default values.
VerletPhysics2D(toxi.geom.Vec2D gravity, int numIterations, float drag, float timeStep)
          Initializes an Verlet engine instance with the passed in configuration.
 
Method Summary
 void addBehavior(ParticleBehavior2D behavior)
           
static void addConstraintToAll(ParticleConstraint2D c, java.util.List<VerletParticle2D> list)
           
 VerletPhysics2D addParticle(VerletParticle2D p)
          Adds a particle to the list
 VerletPhysics2D addSpring(VerletSpring2D s)
          Adds a spring connector
 VerletPhysics2D clear()
           
 toxi.geom.Rect getCurrentBounds()
           
 float getDrag()
           
 int getNumIterations()
           
 VerletSpring2D getSpring(toxi.geom.Vec2D a, toxi.geom.Vec2D b)
          Attempts to find the spring element between the 2 particles supplied
 float getTimeStep()
           
 toxi.geom.Rect getWorldBounds()
           
 boolean removeBehavior(ParticleBehavior2D c)
           
static void removeConstraintFromAll(ParticleConstraint2D c, java.util.List<VerletParticle2D> list)
           
 boolean removeParticle(VerletParticle2D p)
          Removes a particle from the simulation.
 boolean removeSpring(VerletSpring2D s)
          Removes a spring connector from the simulation instance.
 boolean removeSpringElements(VerletSpring2D s)
          Removes a spring connector and its both end point particles from the simulation
 void setDrag(float drag)
           
 void setNumIterations(int numIterations)
           
 void setTimeStep(float timeStep)
           
 VerletPhysics2D setWorldBounds(toxi.geom.Rect world)
          Sets bounding box
 VerletPhysics2D update()
          Progresses the physics simulation by 1 time step and updates all forces and particle positions accordingly
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

particles

public java.util.ArrayList<VerletParticle2D> particles
List of particles


springs

public java.util.ArrayList<VerletSpring2D> springs
List of spring/stick connectors


behaviors

public final java.util.List<ParticleBehavior2D> behaviors
Constructor Detail

VerletPhysics2D

public VerletPhysics2D()
Initializes a Verlet engine instance using the default values.


VerletPhysics2D

public VerletPhysics2D(toxi.geom.Vec2D gravity,
                       int numIterations,
                       float drag,
                       float timeStep)
Initializes an Verlet engine instance with the passed in configuration.

Parameters:
gravity - 3D gravity vector
numIterations - iterations per time step for verlet solver
drag - drag value 0...1
timeStep - time step for calculating forces
Method Detail

addConstraintToAll

public static void addConstraintToAll(ParticleConstraint2D c,
                                      java.util.List<VerletParticle2D> list)

removeConstraintFromAll

public static void removeConstraintFromAll(ParticleConstraint2D c,
                                           java.util.List<VerletParticle2D> list)

addBehavior

public void addBehavior(ParticleBehavior2D behavior)

addParticle

public VerletPhysics2D addParticle(VerletParticle2D p)
Adds a particle to the list

Parameters:
p -
Returns:
itself

addSpring

public VerletPhysics2D addSpring(VerletSpring2D s)
Adds a spring connector

Parameters:
s -
Returns:
itself

clear

public VerletPhysics2D clear()

getCurrentBounds

public toxi.geom.Rect getCurrentBounds()

getDrag

public float getDrag()

getNumIterations

public int getNumIterations()
Returns:
the numIterations

getSpring

public VerletSpring2D getSpring(toxi.geom.Vec2D a,
                                toxi.geom.Vec2D b)
Attempts to find the spring element between the 2 particles supplied

Parameters:
a - particle 1
b - particle 2
Returns:
spring instance, or null if not found

getTimeStep

public float getTimeStep()
Returns:
the timeStep

getWorldBounds

public toxi.geom.Rect getWorldBounds()
Returns:
the worldBounds

removeBehavior

public boolean removeBehavior(ParticleBehavior2D c)

removeParticle

public boolean removeParticle(VerletParticle2D p)
Removes a particle from the simulation.

Parameters:
p - particle to remove
Returns:
true, if removed successfully

removeSpring

public boolean removeSpring(VerletSpring2D s)
Removes a spring connector from the simulation instance.

Parameters:
s - spring to remove
Returns:
true, if the spring has been removed

removeSpringElements

public boolean removeSpringElements(VerletSpring2D s)
Removes a spring connector and its both end point particles from the simulation

Parameters:
s - spring to remove
Returns:
true, only if spring AND particles have been removed successfully

setDrag

public void setDrag(float drag)

setNumIterations

public void setNumIterations(int numIterations)
Parameters:
numIterations - the numIterations to set

setTimeStep

public void setTimeStep(float timeStep)
Parameters:
timeStep - the timeStep to set

setWorldBounds

public VerletPhysics2D setWorldBounds(toxi.geom.Rect world)
Sets bounding box

Parameters:
world -
Returns:
itself

update

public VerletPhysics2D update()
Progresses the physics simulation by 1 time step and updates all forces and particle positions accordingly

Returns:
itself