Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
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 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);
        }
Ejemplo n.º 4
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);
        }