public void ComputeCollision() { CollisionDetection cd = new CollisionDetection(); CombinedCollisionAlgorithm cca = new CombinedCollisionAlgorithm(cd, new SphereSphereAlgorithm(cd), new SphereSphereAlgorithm(cd)); CollisionObject a = new CollisionObject(new GeometricObject { Shape = new SphereShape(1), }); CollisionObject b = new CollisionObject(new GeometricObject { Shape = new SphereShape(1), Pose = new Pose(new Vector3(3, 0, 0)), }); ContactSet set = cca.GetClosestPoints(a, b); Assert.AreEqual(1, set.Count); set = cca.GetContacts(a, b); Assert.IsTrue(set == null || set.Count == 0); ((GeometricObject)b.GeometricObject).Pose = new Pose(new Vector3(2, 0, 0)); set = cca.GetClosestPoints(a, b); Assert.AreEqual(1, set.Count); set = cca.GetContacts(a, b); Assert.AreEqual(1, set.Count); }
public void ComputeCollision() { CollisionDetection cd = new CollisionDetection(); CombinedCollisionAlgorithm cca = new CombinedCollisionAlgorithm(cd, new SphereSphereAlgorithm(cd), new SphereSphereAlgorithm(cd)); CollisionObject a = new CollisionObject(new GeometricObject { Shape = new SphereShape(1), }); CollisionObject b = new CollisionObject(new GeometricObject { Shape = new SphereShape(1), Pose = new Pose(new Vector3F(3, 0, 0)), }); ContactSet set = cca.GetClosestPoints(a, b); Assert.AreEqual(1, set.Count); set = cca.GetContacts(a, b); Assert.IsTrue(set == null || set.Count == 0); ((GeometricObject)b.GeometricObject).Pose = new Pose(new Vector3F(2, 0, 0)); set = cca.GetClosestPoints(a, b); Assert.AreEqual(1, set.Count); set = cca.GetContacts(a, b); Assert.AreEqual(1, set.Count); }
public void TouchingButNotTouching() { // Special case: GJK reports contact, MPR cannot find the contact. // This happens for perfectly touching quadrics. CollisionDetection cd = new CollisionDetection(); CombinedCollisionAlgorithm cca = new CombinedCollisionAlgorithm(cd, new Gjk(cd), new MinkowskiPortalRefinement(cd)); CollisionObject a = new CollisionObject(); ((GeometricObject)a.GeometricObject).Shape = new ConeShape(2, 2); CollisionObject b = new CollisionObject(); ((GeometricObject)b.GeometricObject).Shape = new CircleShape(2); ((GeometricObject)b.GeometricObject).Pose = new Pose(new Vector3(4, 0, 0)); Assert.AreEqual(false, cca.HaveContact(a, b)); Assert.AreEqual(0, cca.GetContacts(a, b).Count); Assert.IsTrue(cca.GetClosestPoints(a, b)[0].PenetrationDepth < 0); }
public void TouchingButNotTouching() { // Special case: GJK reports contact, MPR cannot find the contact. // This happens for perfectly touching quadrics. CollisionDetection cd = new CollisionDetection(); CombinedCollisionAlgorithm cca = new CombinedCollisionAlgorithm(cd, new Gjk(cd), new MinkowskiPortalRefinement(cd)); CollisionObject a = new CollisionObject(); ((GeometricObject)a.GeometricObject).Shape = new ConeShape(2, 2); CollisionObject b = new CollisionObject(); ((GeometricObject)b.GeometricObject).Shape = new CircleShape(2); ((GeometricObject)b.GeometricObject).Pose = new Pose(new Vector3F(4, 0, 0)); Assert.AreEqual(false, cca.HaveContact(a, b)); Assert.AreEqual(0, cca.GetContacts(a, b).Count); Assert.IsTrue(cca.GetClosestPoints(a, b)[0].PenetrationDepth < 0); }