nimblephysics icon indicating copy to clipboard operation
nimblephysics copied to clipboard

Edge-edge contacts generated from `DARTCollide::createFaceFaceContacts()` don't have a deterministic order

Open keenon opened this issue 4 years ago • 0 comments

The helper method DARTCollide::createFaceFaceContacts() returns a list of contact points given a pair of convex hulls colliding at a witness plane. The method receives all the "witness points" (vertices within epsilon of the witness plane) from each convex hull. Then the method uses 2D geometry, mapping all the "witness points" from both objects into the witness plane. In 2D "witness plane space" the witness points themselves form 2D convex shapes (any slice of a convex set is also convex). To generate and classify contact points, we take:

  • any points from object A that lie within object B are vertex-face collisions from A to B.
  • any points from object B that lie within object A are face-vertex collisions from A to B.
  • any edges that intersect between A and B become an edge-edge collision from A to B.

This ticket is about the fact that the edge-edge collisions do not currently have a deterministic order. We'd like there to always be consistent ordering of collisions, for cacheing and finite differencing elsewhere relies on this fact.

keenon avatar Feb 02 '21 00:02 keenon