February 6, 2010

Change Log


  • Android performance improvements
  • Java 9 module support
  • OSGi support
  • Fixed a rare issue where GJK would loop forever
  • Properly maven-ized the project
  • Added flag for temporarily turning off ContactConstraints for a single timestep
  • Deprecated ContactListener.sensed method.  The other methods will report these contacts now.
  • Some other small performance improvements


  • Fix for re-use of Joints after being removed from a World.
  • Defaulted the Sap broadphase detector’s binary tree to be self-balancing
  • The DefaultBroadphaseFilter class now allows non-dynamic vs. non-dynamic collisions to proceed through the pipeline as long as one of them is a sensor.


  • Fixes for the Sap broadphase detector.
  • Fixes for the Slice, Capsule, Ellipse, and HalfEllipse classes.


  • Added a new Link shape for smooth sliding across linked segments.
  • A few minor fixes.


  • A couple of critical bug fixes in the Polygon, Rectangle and Segment classes when used in a multi-fixture body with local transformations.
  • Better joint javadoc documentation.
  • A couple of minor new methods in some of the joint classes.


  • Performance enhancements.
  • Javadoc clean up and review.
  • Cleaner API with less classes and members to look through.
  • MouseJoint renamed to PinJoint.
  • Mass.Type enumeration renamed to MassType.
  • Removed deprecated methods and classes.
  • Deprecated Body.setMass() method, use Body.setMass(MassType) instead.


  • Some minor performance tweaks.
  • Fixed a bug in World.raycast(Ray,double,boolean,boolean,List) method.


  • Added a new update(double, int) method to the World class that will execute as many steps as are required by the given elapsed time. Left over time is added to an internal accumulator which can be accessed by the getAccumulatedTime method.
  • Fixed a bug in the WeldJoint class when using two bodies with FIXED_ANGULAR_VELOCITY.
  • Fixed a NPE in the World.detect methods introduced in 3.1.9.
  • Fixed a bug in the EarClipping class.
  • Fixed a bug in the Bayazit class.


  • Added a new Triangulator interface to get triangulations in addition to convex decompositions.
  • Updated the World class with new detect methods with many more input and output options.
  • Fixed a number of bugs in the convex decomposition classes.
  • Fixed a bug in the World.convexCast method where it was returning too early.
  • Fixed a bug in the Java exporter in the Sandbox.


  • Fixed a bug in the Vector2.distance(double,double) method.
  • Added some methods on the Body class to return BodyFixture(s) at a given world space point.
  • Added some additional documentation to the World.convexCast methods regarding start position caveats.


  • Fixed bugs in the Ellipse.contains, Ellipse.getHalfHeight, and HalfEllipse.contains methods.
  • Fixed a bug in the Graphics2DRenderer class for Ellipse shapes.
  • Removed the Ellipse.getPointClosestToPoint method.


  • Added a method to the PulleyJoint class to allow slack in the constraint to better simulate a rope connecting the bodies.
  • Fixed a bug in the Segment.getSegmentIntersection method where certain cases would return false positives.


  • Added 4 new convex primitive types: Capsule, Slice (cicular section), Ellipse, and HalfEllipse.  (Ellipse and HalfEllipse are not supported by the SAT narrow-phase collision detector.)
  • Added methods to the Geometry class to generate polygonal versions of Capsules, Slices, Ellipses, and HalfEllipses.
  • Added a new FallbackNarrowphaseDetector class to allow support of shapes that would normally not be supported by the current NarrowphaseDetector.
  • Added methods to the Geometry class to compute the Minkowski Sum of two Convexes.
  • Added methods to the Geometry class that scale Convexes.
  • Added Convex Casting to the World class.
  • Added hundreds more JUnit tests.
  • Added a new Graphics2DRenderer to the examples directory to assist in drawing shapes using Java2D.


  • Fixed a bug that was introduced in 3.1.3 that could have affect the center of mass calculations.
  • Added flip methods to the Geometry class to flip polygons about arbitrary axes and points.
  • Changed the ids from string to UUID for better performance. (They were the string version of the UUIDs before)


  • Fixed a bug with the inertia and center of mass calculations for polygons created away from the origin. This also fixes multi-fixture body inertias as well.


  • Added a ContactPointId to all ContactPoint objects to track them during the ContactListener begin/persist/end methods.


  • Added a Release Notes file to better track changes.
  • Added detect methods to the World class for area queries.
  • Added contains methods to the World class for Bodies, Joints, and Listeners.
  • Added a swept AABB test before perform Conservative Advancement to improve performance.
  • Added applyImpulse methods to the Body class.
  • Moved the userData field from the Joint class to the Constraint class allowing ContactConstraints to store user data as well.
  • Many other minor convenience methods.


  • Added a MotorJoint class to help with character control.
  • Added coordinate shifting to the World class for large worlds.
  • Added a ratio option to the AngleJoint class to model gears.
  • Added the ability to have multiple listeners of the same type for all listeners.
  • Added runtime version checking methods to the Version class.
  • Added an elapsedTime parameter to the Force/Torque.isComplete methods.
  • Many bug fixes.


  • Each World instance can have its own Settings


  • Added a TypeFilter class
  • Added a tangent speed setting on contacts to simulate conveyor belts
  • Internationalized dyn4j and Sandbox (any volunteers for translations?)
  • Small CCD improvements
  • Major and minor bug fixes


  • Added a new testing/demo application: Sandbox
  • Added ability for a soft joint to the WeldJoint class
  • Normalized a number of methods
  • Major and minor bug fixes


  • Revamped the Broadphase collision detection interface
  • Added 3 new broadphase implementations
  • Added a gravity scale member to the Body class
  • Base package of org.dyn4j
  • Added the WheelJoint class
  • Deprecated the LineJoint class
  • Added example application classes: ExampleJOGL and ExampleGraphics2D
  • Added documentation on how to use the provided CategoryFilter class
  • Simplified RaycastListener interface
  • Major and minor performance improvements
  • Major and minor bug fixes


  • Minor performance enhancements
  • Added 3 CCD modes to choose from (for performance reasons)
  • Major update to Javadocs adding @throws declarations and updating old information
  • Converted the TestBed to JOGL from Java2D


  • Added minimum distance to RopeJoint
  • Added AngleJoint
  • Minor bug fixes


  • Rope Joint (maximum distance joint)
  • Added SecurityException checks


  • Convex Hull Generation
  • Convex Decomposition


  • Simple Multithreading
  • Pulley Joint


  • Continuous Collision Detection
  • Ray casting


  • Added the contact block solver that Box2d has (this improved stacking considerably).
  • Made the ClippingManifoldSolver more deterministic.
  • Added some checks for invalid Penetration and Manifold objects to the World class.
  • Made some small changes to the GJK class to catch some non-penetration cases faster.
  • Added sensed contact reporting to the TestBed.


  • Made minor performance improvement in the getFarthestXXX methods of the Polygon class.
  • Added all the references to the Box2d project (totally forgot to do this before the first release).
  • Added special triangles to the Shapes test in the TestBed.
  • Added a new test called Destructible to the TestBed.
  • Added version and since javadoc tags to all files.


  • Added a few more methods to the Body class to querying joints and contacts.
  • Formalized the UnitConversion class for converting FPS to MKS.
  • Added a number of new JUnit tests.
  • Fixed some API bugs revealed by testing.

v1.0.0 (First Release)

  • Basically the same as 0.10.0 except with a few small modifications.

v0.10.0 Added

  • Refactored Vector class to Vector2
  • Added Vector3, Matrix22, and Matrix33 classes for joint solving
  • Added friction and weld joints
  • Added line and prismatic joints
  • refactored the setMassFromShapes() methods to just setMass()
  • Get axes methods of the shape classes now return normalized vectors
  • Torques are now applied by supplying only a double argument.

v0.8.0 Added

  • Large API changes
  • Revolute joint motors and limits
  • Added a mouse joint
  • Added Fixture notion like Box2D
  • Added a coefficient mixer to allow override of friction and restitution mixing
  • Added a collision listener that listens for broad and narrow phase collision events and for manifold generation events

v0.7.2 Added

  • Normal and spring/damper distance joint
  • Revolute joint
  • Force and torque accumulators


  • Common convex geometric shapes: Circle, Rectangle, Polygon, etc.
  • Non-convex shapes (by composition)
  • Broad-phase collision detection (Sweep and Prune)
  • Narrow-phase collision detection (SAT or GJK-EPA)
  • Clipping manifold solver
  • Collision filtering
  • Shape reuse by use of transformations
  • Sequential Impulse solver
  • Sleeping
  • Contact constraints
  • Contact notification
  • Joints (currently only static distance joint)
  • Tunable at runtime or compile time
  • Highly extensible
  • Liberally documented with both comments and Javadocs
  • Full suite of JUnit tests
  • TestBed test application for testing various physical configurations.