public void TestContainment2()
        {
            // Second sphere is within first sphere on same position.

            SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());

            CollisionObject objectA = new CollisionObject();

            ((GeometricObject)objectA.GeometricObject).Shape = new SphereShape(1);
            CollisionObject objectB = new CollisionObject();

            ((GeometricObject)objectB.GeometricObject).Shape = new SphereShape(0.5f);

            ((GeometricObject)objectA.GeometricObject).Pose = new Pose(new Vector3F(1, 1, 1));
            ((GeometricObject)objectB.GeometricObject).Pose = new Pose(new Vector3F(1, 1, 1));

            ContactSet cs = ContactSet.Create(objectA, objectB);

            algo.UpdateContacts(cs, 0);

            Assert.AreEqual(1, cs.Count);
            Assert.AreEqual(new Vector3F(1, 1.25f, 1), cs[0].Position);
            Assert.AreEqual(new Vector3F(0, 1, 0), cs[0].Normal);
            Assert.IsTrue(Numeric.AreEqual(1.5f, cs[0].PenetrationDepth));
        }
        public void TestInterpenetration2()
        {
            // Center of the second sphere is within the first sphere.

            SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());

            CollisionObject objectA = new CollisionObject();

            ((GeometricObject)objectA.GeometricObject).Shape = new SphereShape(1);
            CollisionObject objectB = new CollisionObject();

            ((GeometricObject)objectB.GeometricObject).Shape = new SphereShape(0.5f);

            ((GeometricObject)objectA.GeometricObject).Pose = new Pose(new Vector3F(0, 0, 0));
            ((GeometricObject)objectB.GeometricObject).Pose = new Pose(new Vector3F(0, 0, 0.75f));

            ContactSet cs = ContactSet.Create(objectA, objectB);

            algo.UpdateContacts(cs, 0);

            Assert.AreEqual(1, cs.Count);
            Assert.AreEqual(new Vector3F(0, 0, 0.625f), cs[0].Position);
            Assert.AreEqual(new Vector3F(0, 0, 1), cs[0].Normal);
            Assert.IsTrue(Numeric.AreEqual(0.75f, cs[0].PenetrationDepth));
        }
        public void TestTouchingContact()
        {
            SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());

            CollisionObject objectA = new CollisionObject();

            ((GeometricObject)objectA.GeometricObject).Shape = new SphereShape(1);
            CollisionObject objectB = new CollisionObject();

            ((GeometricObject)objectB.GeometricObject).Shape = new SphereShape(0.5f);

            ((GeometricObject)objectA.GeometricObject).Pose = new Pose(new Vector3F(0, 0, 0));
            ((GeometricObject)objectB.GeometricObject).Pose = new Pose(new Vector3F(1.5f, 0, 0));

            ContactSet cs = ContactSet.Create(objectA, objectB);

            algo.UpdateContacts(cs, 0);

            Assert.AreEqual(objectA, cs.ObjectA);
            Assert.AreEqual(objectB, cs.ObjectB);
            Assert.AreEqual(1, cs.Count);
            Assert.AreEqual(new Vector3F(1, 0, 0), cs[0].Position);
            Assert.AreEqual(new Vector3F(1, 0, 0), cs[0].Normal);
            Assert.IsTrue(Numeric.AreEqual(0, cs[0].PenetrationDepth));
        }
        public void TestArgumentException1()
        {
            SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());

            CollisionObject objectA = new CollisionObject();
            CollisionObject objectB = new CollisionObject();
            ContactSet      cs      = ContactSet.Create(objectA, objectB);

            algo.UpdateContacts(cs, 0);
        }
Exemplo n.º 5
0
        public void TestArgumentException1()
        {
            SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());

              CollisionObject objectA = new CollisionObject();
              CollisionObject objectB = new CollisionObject();
              ContactSet cs = ContactSet.Create(objectA, objectB);

              algo.UpdateContacts(cs, 0);
        }
Exemplo n.º 6
0
        public void TestArgumentException3()
        {
            SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());

              CollisionObject objectA = new CollisionObject();
              CollisionObject objectB = new CollisionObject();
              ((GeometricObject)objectB.GeometricObject).Shape = new SphereShape(1);

              ContactSet cs = ContactSet.Create(objectA, objectB);
              algo.UpdateContacts(cs, 0);
        }
        public void TestArgumentException3()
        {
            SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());

            CollisionObject objectA = new CollisionObject();
            CollisionObject objectB = new CollisionObject();

            ((GeometricObject)objectB.GeometricObject).Shape = new SphereShape(1);

            ContactSet cs = ContactSet.Create(objectA, objectB);

            algo.UpdateContacts(cs, 0);
        }
        public void TestZeroSphere1()
        {
            SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());

            CollisionObject objectA = new CollisionObject();

            ((GeometricObject)objectA.GeometricObject).Shape = new SphereShape(0);
            CollisionObject objectB = new CollisionObject();

            ((GeometricObject)objectB.GeometricObject).Shape = new SphereShape(0);

            ((GeometricObject)objectA.GeometricObject).Pose = new Pose(new Vector3F(0, 0, 0));
            ((GeometricObject)objectB.GeometricObject).Pose = new Pose(new Vector3F(0, 2f, 0));

            ContactSet cs = ContactSet.Create(objectA, objectB);

            algo.UpdateContacts(cs, 0);

            Assert.AreEqual(0, cs.Count);
        }
        public void TestInfiniteSphere()
        {
            SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());

            CollisionObject objectA = new CollisionObject();

            ((GeometricObject)objectA.GeometricObject).Shape = new SphereShape(float.PositiveInfinity);
            CollisionObject objectB = new CollisionObject();

            ((GeometricObject)objectB.GeometricObject).Shape = new SphereShape(1f);

            ((GeometricObject)objectA.GeometricObject).Pose = new Pose(new Vector3F(0, 0, 0));
            ((GeometricObject)objectB.GeometricObject).Pose = new Pose(new Vector3F(0, 2f, 0));

            ContactSet cs = ContactSet.Create(objectA, objectB);

            algo.UpdateContacts(cs, 0);

            Assert.AreEqual(1, cs.Count);
            //Assert.AreEqual(new Vector3F(0, 1f, 0), cs.Contacts[0].Position);     // Undefined when a sphere is infinite.
            Assert.AreEqual(new Vector3F(0, 1, 0), cs[0].Normal);
            Assert.IsTrue(float.IsPositiveInfinity(cs[0].PenetrationDepth));
        }
        public void TestNoContact()
        {
            SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());

            CollisionObject objectA = new CollisionObject();

            ((GeometricObject)objectA.GeometricObject).Shape = new SphereShape(1);
            CollisionObject objectB = new CollisionObject();

            ((GeometricObject)objectB.GeometricObject).Shape = new SphereShape(0.5f);

            ((GeometricObject)objectA.GeometricObject).Pose = new Pose(new Vector3F(0, 0, 0));
            ((GeometricObject)objectB.GeometricObject).Pose = new Pose(new Vector3F(1.6f, 0, 0));

            ContactSet cs = ContactSet.Create(objectA, objectB);

            cs.Add(ContactHelper.CreateContact(cs, Vector3F.Zero, Vector3F.UnitX, 0, false));

            algo.UpdateContacts(cs, 0);
            Assert.AreEqual(objectA, cs.ObjectA);
            Assert.AreEqual(objectB, cs.ObjectB);
            Assert.AreEqual(0, cs.Count);
        }
Exemplo n.º 11
0
        public void TestNoContact()
        {
            SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());

              CollisionObject objectA = new CollisionObject();
              ((GeometricObject)objectA.GeometricObject).Shape = new SphereShape(1);
              CollisionObject objectB = new CollisionObject();
              ((GeometricObject)objectB.GeometricObject).Shape = new SphereShape(0.5f);

              ((GeometricObject)objectA.GeometricObject).Pose = new Pose(new Vector3F(0, 0, 0));
              ((GeometricObject)objectB.GeometricObject).Pose = new Pose(new Vector3F(1.6f, 0, 0));

              ContactSet cs = ContactSet.Create(objectA, objectB);
              cs.Add(ContactHelper.CreateContact(cs, Vector3F.Zero, Vector3F.UnitX, 0, false));

              algo.UpdateContacts(cs, 0);
              Assert.AreEqual(objectA, cs.ObjectA);
              Assert.AreEqual(objectB, cs.ObjectB);
              Assert.AreEqual(0, cs.Count);
        }
Exemplo n.º 12
0
        public void TestContainment1()
        {
            // Second sphere is within first sphere.

              SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());

              CollisionObject objectA = new CollisionObject();
              ((GeometricObject)objectA.GeometricObject).Shape = new SphereShape(1);
              CollisionObject objectB = new CollisionObject();
              ((GeometricObject)objectB.GeometricObject).Shape = new SphereShape(0.5f);

              ((GeometricObject)objectA.GeometricObject).Pose = new Pose(new Vector3F(0, 0, 0));
              ((GeometricObject)objectB.GeometricObject).Pose = new Pose(new Vector3F(0, 0, 0.5f));

              ContactSet cs = ContactSet.Create(objectA, objectB);

              algo.UpdateContacts(cs, 0);

              Assert.AreEqual(1, cs.Count);
              Assert.AreEqual(new Vector3F(0, 0, 0.5f), cs[0].Position);
              Assert.AreEqual(new Vector3F(0, 0, 1), cs[0].Normal);
              Assert.IsTrue(Numeric.AreEqual(1, cs[0].PenetrationDepth));
        }
Exemplo n.º 13
0
        public void TestZeroSphere1()
        {
            SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());

              CollisionObject objectA = new CollisionObject();
              ((GeometricObject)objectA.GeometricObject).Shape = new SphereShape(0);
              CollisionObject objectB = new CollisionObject();
              ((GeometricObject)objectB.GeometricObject).Shape = new SphereShape(0);

              ((GeometricObject)objectA.GeometricObject).Pose = new Pose(new Vector3F(0, 0, 0));
              ((GeometricObject)objectB.GeometricObject).Pose = new Pose(new Vector3F(0, 2f, 0));

              ContactSet cs = ContactSet.Create(objectA, objectB);

              algo.UpdateContacts(cs, 0);

              Assert.AreEqual(0, cs.Count);
        }
Exemplo n.º 14
0
        public void TestZeroSphere()
        {
            SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());

              CollisionObject objectA = new CollisionObject();
              ((GeometricObject)objectA.GeometricObject).Shape = new SphereShape(0);
              CollisionObject objectB = new CollisionObject();
              ((GeometricObject)objectB.GeometricObject).Shape = new SphereShape(0);

              ((GeometricObject)objectA.GeometricObject).Pose = new Pose(new Vector3F(0, 0, 1));
              ((GeometricObject)objectB.GeometricObject).Pose = new Pose(new Vector3F(0, 0, 1));

              ContactSet cs = ContactSet.Create(objectA, objectB);

              algo.UpdateContacts(cs, 0);

              Assert.AreEqual(1, cs.Count);
              Assert.AreEqual(new Vector3F(0, 0, 1), cs[0].Position);
              //Assert.AreEqual(new Vector3F(0, 0, 1), cs.Contacts[0].Normal);
              Assert.IsTrue(Numeric.AreEqual(0, cs[0].PenetrationDepth));
        }
Exemplo n.º 15
0
 public void TestNullArgument()
 {
     SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());
       algo.UpdateContacts(null, 0);
 }
        public void TestNullArgument()
        {
            SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());

            algo.UpdateContacts(null, 0);
        }
Exemplo n.º 17
0
        public void TestInfiniteSphere()
        {
            SphereSphereAlgorithm algo = new SphereSphereAlgorithm(new CollisionDetection());

              CollisionObject objectA = new CollisionObject();
              ((GeometricObject)objectA.GeometricObject).Shape = new SphereShape(float.PositiveInfinity);
              CollisionObject objectB = new CollisionObject();
              ((GeometricObject)objectB.GeometricObject).Shape = new SphereShape(1f);

              ((GeometricObject)objectA.GeometricObject).Pose = new Pose(new Vector3F(0, 0, 0));
              ((GeometricObject)objectB.GeometricObject).Pose = new Pose(new Vector3F(0, 2f, 0));

              ContactSet cs = ContactSet.Create(objectA, objectB);

              algo.UpdateContacts(cs, 0);

              Assert.AreEqual(1, cs.Count);
              //Assert.AreEqual(new Vector3F(0, 1f, 0), cs.Contacts[0].Position);     // Undefined when a sphere is infinite.
              Assert.AreEqual(new Vector3F(0, 1, 0), cs[0].Normal);
              Assert.IsTrue(float.IsPositiveInfinity(cs[0].PenetrationDepth));
        }