Ejemplo n.º 1
0
        public void SerializationBinary()
        {
            Pose            poseA     = new Pose(new Vector3F(1, 2, 3));
            PointShape      pointA    = new PointShape(3, 4, 5);
            GeometricObject geometryA = new GeometricObject(pointA, poseA);

            Pose            poseB     = new Pose(new Vector3F(11, 22, 33));
            PointShape      pointB    = new PointShape(33, 44, 55);
            GeometricObject geometryB = new GeometricObject(pointB, poseB);

            var a = new MinkowskiDifferenceShape(geometryA, geometryB);

            // Serialize object.
            var stream    = new MemoryStream();
            var formatter = new BinaryFormatter();

            formatter.Serialize(stream, a);

            // Deserialize object.
            stream.Position = 0;
            var deserializer = new BinaryFormatter();
            var b            = (MinkowskiDifferenceShape)deserializer.Deserialize(stream);

            Assert.AreEqual(a.ObjectA.Pose, b.ObjectA.Pose);
            Assert.AreEqual(a.ObjectB.Pose, b.ObjectB.Pose);
            Assert.AreEqual(((PointShape)a.ObjectA.Shape).Position, ((PointShape)b.ObjectA.Shape).Position);
            Assert.AreEqual(((PointShape)a.ObjectB.Shape).Position, ((PointShape)b.ObjectB.Shape).Position);
        }
Ejemplo n.º 2
0
        public void Clone()
        {
            Pose            poseA     = new Pose(new Vector3F(1, 2, 3));
            PointShape      pointA    = new PointShape(3, 4, 5);
            GeometricObject geometryA = new GeometricObject(pointA, poseA);

            Pose            poseB     = new Pose(new Vector3F(1, 2, 3));
            PointShape      pointB    = new PointShape(3, 4, 5);
            GeometricObject geometryB = new GeometricObject(pointB, poseB);

            MinkowskiDifferenceShape minkowskiDifferenceShape = new MinkowskiDifferenceShape(geometryA, geometryB);
            MinkowskiDifferenceShape clone = minkowskiDifferenceShape.Clone() as MinkowskiDifferenceShape;

            Assert.IsNotNull(clone);
            Assert.IsNotNull(clone.ObjectA);
            Assert.IsNotNull(clone.ObjectB);
            Assert.AreNotSame(geometryA, clone.ObjectA);
            Assert.AreNotSame(geometryB, clone.ObjectB);
            Assert.IsTrue(clone.ObjectA is GeometricObject);
            Assert.IsTrue(clone.ObjectB is GeometricObject);
            Assert.AreEqual(poseA, clone.ObjectA.Pose);
            Assert.AreEqual(poseB, clone.ObjectB.Pose);
            Assert.IsNotNull(clone.ObjectA.Shape);
            Assert.IsNotNull(clone.ObjectB.Shape);
            Assert.AreNotSame(pointA, clone.ObjectA.Shape);
            Assert.AreNotSame(pointB, clone.ObjectB.Shape);
            Assert.IsTrue(clone.ObjectA.Shape is PointShape);
            Assert.IsTrue(clone.ObjectB.Shape is PointShape);
            Assert.AreEqual(pointA.Position, ((PointShape)clone.ObjectA.Shape).Position);
            Assert.AreEqual(pointB.Position, ((PointShape)clone.ObjectB.Shape).Position);
            Assert.AreEqual(minkowskiDifferenceShape.GetAabb(Pose.Identity).Minimum, clone.GetAabb(Pose.Identity).Minimum);
            Assert.AreEqual(minkowskiDifferenceShape.GetAabb(Pose.Identity).Maximum, clone.GetAabb(Pose.Identity).Maximum);
        }
Ejemplo n.º 3
0
        public void Clone()
        {
            Pose poseA = new Pose(new Vector3F(1, 2, 3));
              PointShape pointA = new PointShape(3, 4, 5);
              GeometricObject geometryA = new GeometricObject(pointA, poseA);

              Pose poseB = new Pose(new Vector3F(1, 2, 3));
              PointShape pointB = new PointShape(3, 4, 5);
              GeometricObject geometryB = new GeometricObject(pointB, poseB);

              MinkowskiDifferenceShape minkowskiDifferenceShape = new MinkowskiDifferenceShape(geometryA, geometryB);
              MinkowskiDifferenceShape clone = minkowskiDifferenceShape.Clone() as MinkowskiDifferenceShape;
              Assert.IsNotNull(clone);
              Assert.IsNotNull(clone.ObjectA);
              Assert.IsNotNull(clone.ObjectB);
              Assert.AreNotSame(geometryA, clone.ObjectA);
              Assert.AreNotSame(geometryB, clone.ObjectB);
              Assert.IsTrue(clone.ObjectA is GeometricObject);
              Assert.IsTrue(clone.ObjectB is GeometricObject);
              Assert.AreEqual(poseA, clone.ObjectA.Pose);
              Assert.AreEqual(poseB, clone.ObjectB.Pose);
              Assert.IsNotNull(clone.ObjectA.Shape);
              Assert.IsNotNull(clone.ObjectB.Shape);
              Assert.AreNotSame(pointA, clone.ObjectA.Shape);
              Assert.AreNotSame(pointB, clone.ObjectB.Shape);
              Assert.IsTrue(clone.ObjectA.Shape is PointShape);
              Assert.IsTrue(clone.ObjectB.Shape is PointShape);
              Assert.AreEqual(pointA.Position, ((PointShape)clone.ObjectA.Shape).Position);
              Assert.AreEqual(pointB.Position, ((PointShape)clone.ObjectB.Shape).Position);
              Assert.AreEqual(minkowskiDifferenceShape.GetAabb(Pose.Identity).Minimum, clone.GetAabb(Pose.Identity).Minimum);
              Assert.AreEqual(minkowskiDifferenceShape.GetAabb(Pose.Identity).Maximum, clone.GetAabb(Pose.Identity).Maximum);
        }
Ejemplo n.º 4
0
        public void Constructor()
        {
            Assert.AreEqual(Vector3F.Zero, ((PointShape)new MinkowskiDifferenceShape().ObjectA.Shape).Position);
              Assert.AreEqual(Vector3F.Zero, ((PointShape)new MinkowskiDifferenceShape().ObjectB.Shape).Position);
              Assert.AreEqual(Pose.Identity, new MinkowskiDifferenceShape().ObjectA.Pose);
              Assert.AreEqual(Pose.Identity, new MinkowskiDifferenceShape().ObjectB.Pose);

              var m = new MinkowskiDifferenceShape(
            new GeometricObject(new CircleShape(3), new Pose(new Vector3F(1, 0, 0), QuaternionF.CreateRotationX(ConstantsF.PiOver2))),
            new GeometricObject(new LineSegmentShape(new Vector3F(0, 5, 0), new Vector3F(0, -5, 0)), Pose.Identity));
              Assert.AreEqual(new Vector3F(1, 0, 0), m.ObjectA.Pose.Position);
              Assert.AreEqual(new Vector3F(0, 0, 0), m.ObjectB.Pose.Position);
        }
Ejemplo n.º 5
0
        public void Constructor()
        {
            Assert.AreEqual(Vector3F.Zero, ((PointShape) new MinkowskiDifferenceShape().ObjectA.Shape).Position);
            Assert.AreEqual(Vector3F.Zero, ((PointShape) new MinkowskiDifferenceShape().ObjectB.Shape).Position);
            Assert.AreEqual(Pose.Identity, new MinkowskiDifferenceShape().ObjectA.Pose);
            Assert.AreEqual(Pose.Identity, new MinkowskiDifferenceShape().ObjectB.Pose);

            var m = new MinkowskiDifferenceShape(
                new GeometricObject(new CircleShape(3), new Pose(new Vector3F(1, 0, 0), QuaternionF.CreateRotationX(ConstantsF.PiOver2))),
                new GeometricObject(new LineSegmentShape(new Vector3F(0, 5, 0), new Vector3F(0, -5, 0)), Pose.Identity));

            Assert.AreEqual(new Vector3F(1, 0, 0), m.ObjectA.Pose.Position);
            Assert.AreEqual(new Vector3F(0, 0, 0), m.ObjectB.Pose.Position);
        }
Ejemplo n.º 6
0
        public void GetSupportPoint()
        {
            Assert.AreEqual(new Vector3F(0, 0, 0), new MinkowskiDifferenceShape().GetSupportPoint(new Vector3F(1, 0, 0)));
            Assert.AreEqual(new Vector3F(0, 0, 0), new MinkowskiDifferenceShape().GetSupportPoint(new Vector3F(0, 1, 0)));
            Assert.AreEqual(new Vector3F(0, 0, 0), new MinkowskiDifferenceShape().GetSupportPoint(new Vector3F(0, 0, 1)));
            Assert.AreEqual(new Vector3F(0, 0, 0), new MinkowskiDifferenceShape().GetSupportPoint(new Vector3F(1, 1, 1)));

            Assert.IsTrue(Vector3F.AreNumericallyEqual(new Vector3F(4, 5, 0), cs.GetSupportPoint(new Vector3F(1, 0, 0))));
            Assert.IsTrue(Vector3F.AreNumericallyEqual(new Vector3F(4, 5, 0), cs.GetSupportPoint(new Vector3F(0, 1, 0))));
            Assert.IsTrue(Vector3F.AreNumericallyEqual(new Vector3F(1, 5, 3), cs.GetSupportPoint(new Vector3F(0, 0, 1))));
            Assert.IsTrue(Vector3F.AreNumericallyEqual(new Vector3F(-2, 5, 0), cs.GetSupportPoint(new Vector3F(-1, 0, 0))));
            Assert.IsTrue(Vector3F.AreNumericallyEqual(new Vector3F(4, -5, 0), cs.GetSupportPoint(new Vector3F(0, -1, 0))));

            MinkowskiDifferenceShape m = new MinkowskiDifferenceShape();

            ((GeometricObject)m.ObjectB).Shape = new LineSegmentShape(new Vector3F(1, 0, 0), new Vector3F(3, 0, 0));
            Assert.AreEqual(new Vector3F(-1, 0, 0), m.GetSupportPoint(new Vector3F(1, 1, 0)));
            ((GeometricObject)m.ObjectB).Pose = new Pose(new Vector3F(1, 1, 0), QuaternionF.Identity);
            Assert.AreEqual(new Vector3F(-2, -1, 0), m.GetSupportPoint(new Vector3F(1, 1, 0)));
            ((GeometricObject)m.ObjectA).Shape = new CircleShape(20);
            Assert.AreEqual(new Vector3F(18, -1, 0), m.GetSupportPoint(new Vector3F(1, 0, 0)));
        }
Ejemplo n.º 7
0
    // Creates a lot of random objects.
    private void CreateRandomObjects()
    {
      var random = new Random();

      var isFirstHeightField = true;

      int currentShape = 0;
      int numberOfObjects = 0;
      while (true)
      {
        numberOfObjects++;
        if (numberOfObjects > ObjectsPerType)
        {
          currentShape++;
          numberOfObjects = 0;
        }

        Shape shape;
        switch (currentShape)
        {
          case 0:
            // Box
            shape = new BoxShape(ObjectSize, ObjectSize * 2, ObjectSize * 3);
            break;
          case 1:
            // Capsule
            shape = new CapsuleShape(0.3f * ObjectSize, 2 * ObjectSize);
            break;
          case 2:
            // Cone
            shape = new ConeShape(1 * ObjectSize, 2 * ObjectSize);
            break;
          case 3:
            // Cylinder
            shape = new CylinderShape(0.4f * ObjectSize, 2 * ObjectSize);
            break;
          case 4:
            // Sphere
            shape = new SphereShape(ObjectSize);
            break;
          case 5:
            // Convex hull of several points.
            ConvexHullOfPoints hull = new ConvexHullOfPoints();
            hull.Points.Add(new Vector3(-1 * ObjectSize, -2 * ObjectSize, -1 * ObjectSize));
            hull.Points.Add(new Vector3(2 * ObjectSize, -1 * ObjectSize, -0.5f * ObjectSize));
            hull.Points.Add(new Vector3(1 * ObjectSize, 2 * ObjectSize, 1 * ObjectSize));
            hull.Points.Add(new Vector3(-1 * ObjectSize, 2 * ObjectSize, 1 * ObjectSize));
            hull.Points.Add(new Vector3(-1 * ObjectSize, 0.7f * ObjectSize, -0.6f * ObjectSize));
            shape = hull;
            break;
          case 6:
            // A composite shape: two boxes that form a "T" shape.
            var composite = new CompositeShape();
            composite.Children.Add(
              new GeometricObject(
                new BoxShape(ObjectSize, 3 * ObjectSize, ObjectSize),
                new Pose(new Vector3(0, 0, 0))));
            composite.Children.Add(
              new GeometricObject(
                new BoxShape(2 * ObjectSize, ObjectSize, ObjectSize),
                new Pose(new Vector3(0, 2 * ObjectSize, 0))));
            shape = composite;
            break;
          case 7:
            shape = new CircleShape(ObjectSize);
            break;
          case 8:
            {
              var compBvh = new CompositeShape();
              compBvh.Children.Add(new GeometricObject(new BoxShape(0.5f, 1, 0.5f), new Pose(new Vector3(0, 0.5f, 0), Matrix.Identity)));
              compBvh.Children.Add(new GeometricObject(new BoxShape(0.8f, 0.5f, 0.5f), new Pose(new Vector3(0.5f, 0.7f, 0), Matrix.CreateRotationZ(-MathHelper.ToRadians(15)))));
              compBvh.Children.Add(new GeometricObject(new SphereShape(0.3f), new Pose(new Vector3(0, 1.15f, 0), Matrix.Identity)));
              compBvh.Children.Add(new GeometricObject(new CapsuleShape(0.2f, 1), new Pose(new Vector3(0.6f, 1.15f, 0), Matrix.CreateRotationX(0.3f))));
              compBvh.Partition = new AabbTree<int>();
              shape = compBvh;
              break;
            }
          case 9:
            CompositeShape comp = new CompositeShape();
            comp.Children.Add(new GeometricObject(new BoxShape(0.5f * ObjectSize, 1 * ObjectSize, 0.5f * ObjectSize), new Pose(new Vector3(0, 0.5f * ObjectSize, 0), Quaternion.Identity)));
            comp.Children.Add(new GeometricObject(new BoxShape(0.8f * ObjectSize, 0.5f * ObjectSize, 0.5f * ObjectSize), new Pose(new Vector3(0.3f * ObjectSize, 0.7f * ObjectSize, 0), Quaternion.CreateRotationZ(-MathHelper.ToRadians(45)))));
            comp.Children.Add(new GeometricObject(new SphereShape(0.3f * ObjectSize), new Pose(new Vector3(0, 1.15f * ObjectSize, 0), Quaternion.Identity)));
            shape = comp;
            break;
          case 10:
            shape = new ConvexHullOfPoints(new[]
            {
              new Vector3(-1 * ObjectSize, -2 * ObjectSize, -1 * ObjectSize),
              new Vector3(2 * ObjectSize, -1 * ObjectSize, -0.5f * ObjectSize),
              new Vector3(1 * ObjectSize, 2 * ObjectSize, 1 * ObjectSize),
              new Vector3(-1 * ObjectSize, 2 * ObjectSize, 1 * ObjectSize),
              new Vector3(-1 * ObjectSize, 0.7f * ObjectSize, -0.6f * ObjectSize)
            });
            break;
          case 11:
            ConvexHullOfShapes shapeHull = new ConvexHullOfShapes();
            shapeHull.Children.Add(new GeometricObject(new SphereShape(0.3f * ObjectSize), new Pose(new Vector3(0, 2 * ObjectSize, 0), Matrix.Identity)));
            shapeHull.Children.Add(new GeometricObject(new BoxShape(1 * ObjectSize, 2 * ObjectSize, 3 * ObjectSize), Pose.Identity));
            shape = shapeHull;
            break;
          case 12:
            shape = Shape.Empty;
            break;
          case 13:
            var numberOfSamplesX = 10;
            var numberOfSamplesZ = 10;
            var samples = new float[numberOfSamplesX * numberOfSamplesZ];
            for (int z = 0; z < numberOfSamplesZ; z++)
              for (int x = 0; x < numberOfSamplesX; x++)
                samples[z * numberOfSamplesX + x] = (float)(Math.Cos(z / 3f) * Math.Sin(x / 2f) * BoxSize / 6);
            HeightField heightField = new HeightField(0, 0, 2 * BoxSize, 2 * BoxSize, samples, numberOfSamplesX, numberOfSamplesZ);
            shape = heightField;
            break;
          //case 14:
          //shape = new LineShape(new Vector3(0.1f, 0.2f, 0.3f), new Vector3(0.1f, 0.2f, -0.3f).Normalized);
          //break;            
          case 15:
            shape = new LineSegmentShape(
              new Vector3(0.1f, 0.2f, 0.3f), new Vector3(0.1f, 0.2f, 0.3f) + 3 * ObjectSize * new Vector3(0.1f, 0.2f, -0.3f));
            break;
          case 16:
            shape = new MinkowskiDifferenceShape
            {
              ObjectA = new GeometricObject(new SphereShape(0.1f * ObjectSize)),
              ObjectB = new GeometricObject(new BoxShape(1 * ObjectSize, 2 * ObjectSize, 3 * ObjectSize))
            };
            break;
          case 17:
            shape = new MinkowskiSumShape
            {
              ObjectA = new GeometricObject(new SphereShape(0.1f * ObjectSize)),
              ObjectB = new GeometricObject(new BoxShape(1 * ObjectSize, 2 * ObjectSize, 3 * ObjectSize)),
            };
            break;
          case 18:
            shape = new OrthographicViewVolume(0, ObjectSize, 0, ObjectSize, ObjectSize / 2, ObjectSize * 2);
            break;
          case 19:
            shape = new PerspectiveViewVolume(MathHelper.ToRadians(60f), 16f / 10, ObjectSize / 2, ObjectSize * 3);
            break;
          case 20:
            shape = new PointShape(0.1f, 0.3f, 0.2f);
            break;
          case 21:
            shape = new RayShape(new Vector3(0.2f, 0, -0.12f), new Vector3(1, 2, 3).Normalized, ObjectSize * 2);
            break;
          case 22:
            shape = new RayShape(new Vector3(0.2f, 0, -0.12f), new Vector3(1, 2, 3).Normalized, ObjectSize * 2)
            {
              StopsAtFirstHit = true
            };
            break;
          case 23:
            shape = new RectangleShape(ObjectSize, ObjectSize * 2);
            break;
          case 24:
            shape = new TransformedShape(
              new GeometricObject(
                new BoxShape(1 * ObjectSize, 2 * ObjectSize, 3 * ObjectSize),
                new Pose(new Vector3(0.1f, 1, -0.2f))));
            break;
          case 25:
            shape = new TriangleShape(
              new Vector3(ObjectSize, 0, 0), new Vector3(0, ObjectSize, 0), new Vector3(ObjectSize, ObjectSize, ObjectSize));
            break;
          //case 26:
          //  {
          //    // Create a composite object from which we get the mesh.
          //    CompositeShape compBvh = new CompositeShape();
          //    compBvh.Children.Add(new GeometricObject(new BoxShape(0.5f, 1, 0.5f), new Pose(new Vector3(0, 0.5f, 0), Matrix.Identity)));
          //    compBvh.Children.Add(
          //      new GeometricObject(
          //        new BoxShape(0.8f, 0.5f, 0.5f),
          //        new Pose(new Vector3(0.5f, 0.7f, 0), Matrix.CreateRotationZ(-(float)MathHelper.ToRadians(15)))));
          //    compBvh.Children.Add(new GeometricObject(new SphereShape(0.3f), new Pose(new Vector3(0, 1.15f, 0), Matrix.Identity)));
          //    compBvh.Children.Add(
          //      new GeometricObject(new CapsuleShape(0.2f, 1), new Pose(new Vector3(0.6f, 1.15f, 0), Matrix.CreateRotationX(0.3f))));

          //    TriangleMeshShape meshBvhShape = new TriangleMeshShape { Mesh = compBvh.GetMesh(0.01f, 3) };
          //    meshBvhShape.Partition = new AabbTree<int>();
          //    shape = meshBvhShape;
          //    break;
          //  }
          //case 27:
          //  {
          //    // Create a composite object from which we get the mesh.
          //    CompositeShape compBvh = new CompositeShape();
          //    compBvh.Children.Add(new GeometricObject(new BoxShape(0.5f, 1, 0.5f), new Pose(new Vector3(0, 0.5f, 0), Quaternion.Identity)));
          //    compBvh.Children.Add(
          //      new GeometricObject(
          //        new BoxShape(0.8f, 0.5f, 0.5f),
          //        new Pose(new Vector3(0.5f, 0.7f, 0), Quaternion.CreateRotationZ(-(float)MathHelper.ToRadians(15)))));
          //    compBvh.Children.Add(new GeometricObject(new SphereShape(0.3f), new Pose(new Vector3(0, 1.15f, 0), Quaternion.Identity)));
          //    compBvh.Children.Add(
          //      new GeometricObject(new CapsuleShape(0.2f, 1), new Pose(new Vector3(0.6f, 1.15f, 0), Quaternion.CreateRotationX(0.3f))));

          //    TriangleMeshShape meshBvhShape = new TriangleMeshShape { Mesh = compBvh.GetMesh(0.01f, 3) };
          //    meshBvhShape.Partition = new AabbTree<int>();
          //    shape = meshBvhShape;
          //    break;
          //  }
          case 28:
            shape = new ConvexPolyhedron(new[]
            {
              new Vector3(-1 * ObjectSize, -2 * ObjectSize, -1 * ObjectSize),
              new Vector3(2 * ObjectSize, -1 * ObjectSize, -0.5f * ObjectSize),
              new Vector3(1 * ObjectSize, 2 * ObjectSize, 1 * ObjectSize),
              new Vector3(-1 * ObjectSize, 2 * ObjectSize, 1 * ObjectSize),
              new Vector3(-1 * ObjectSize, 0.7f * ObjectSize, -0.6f * ObjectSize)
            });
            break;
          case 29:
            return;
          default:
            currentShape++;
            continue;
        }

        // Create an object with the random shape, pose, color and velocity.
        Pose randomPose = new Pose(
          random.NextVector3(-BoxSize + ObjectSize * 2, BoxSize - ObjectSize * 2),
          random.NextQuaternion());
        var newObject = new MovingGeometricObject
        {
          Pose = randomPose,
          Shape = shape,
          LinearVelocity = random.NextQuaternion().Rotate(new Vector3(MaxLinearVelocity, 0, 0)),
          AngularVelocity = random.NextQuaternion().Rotate(Vector3.Forward)
                            * RandomHelper.Random.NextFloat(0, MaxAngularVelocity),
        };

        if (RandomHelper.Random.NextBool())
          newObject.LinearVelocity = Vector3.Zero;
        if (RandomHelper.Random.NextBool())
          newObject.AngularVelocity = Vector3.Zero;

        if (shape is LineShape || shape is HeightField)
        {
          // Do not move lines or the height field.
          newObject.LinearVelocity = Vector3.Zero;
          newObject.AngularVelocity = Vector3.Zero;
        }

        // Create only 1 heightField!
        if (shape is HeightField)
        {
          if (isFirstHeightField)
          {
            isFirstHeightField = true;
            newObject.Pose = new Pose(new Vector3(-BoxSize, -BoxSize, -BoxSize));
          }
          else
          {
            currentShape++;
            numberOfObjects = 0;
            continue;
          }
        }

        // Add collision object to collision domain.
        _domain.CollisionObjects.Add(new CollisionObject(newObject));

        //co.Type = CollisionObjectType.Trigger;
        //co.Name = "Object" + shape.GetType().Name + "_" + i;
      }
    }
Ejemplo n.º 8
0
 public void ConstructorException2()
 {
     var m = new MinkowskiDifferenceShape(new GeometricObject(), null);
 }
Ejemplo n.º 9
0
 public void SetUp()
 {
     cs         = new MinkowskiDifferenceShape();
     cs.ObjectA = new GeometricObject(new CircleShape(3), new Pose(new Vector3F(1, 0, 0), QuaternionF.CreateRotationX(ConstantsF.PiOver2)));
     cs.ObjectB = new GeometricObject(new LineSegmentShape(new Vector3F(0, 5, 0), new Vector3F(0, -5, 0)), Pose.Identity);
 }
Ejemplo n.º 10
0
 public void ConstructorException2()
 {
     var m = new MinkowskiDifferenceShape(new GeometricObject(), null);
 }
Ejemplo n.º 11
0
 public void SetUp()
 {
     cs = new MinkowskiDifferenceShape();
       cs.ObjectA = new GeometricObject(new CircleShape(3), new Pose(new Vector3F(1, 0, 0), QuaternionF.CreateRotationX(ConstantsF.PiOver2)));
       cs.ObjectB = new GeometricObject(new LineSegmentShape(new Vector3F(0, 5, 0), new Vector3F(0, -5, 0)), Pose.Identity);
 }
Ejemplo n.º 12
0
        public void SerializationBinary()
        {
            Pose poseA = new Pose(new Vector3F(1, 2, 3));
              PointShape pointA = new PointShape(3, 4, 5);
              GeometricObject geometryA = new GeometricObject(pointA, poseA);

              Pose poseB = new Pose(new Vector3F(11, 22, 33));
              PointShape pointB = new PointShape(33, 44, 55);
              GeometricObject geometryB = new GeometricObject(pointB, poseB);

              var a = new MinkowskiDifferenceShape(geometryA, geometryB);

              // Serialize object.
              var stream = new MemoryStream();
              var formatter = new BinaryFormatter();
              formatter.Serialize(stream, a);

              // Deserialize object.
              stream.Position = 0;
              var deserializer = new BinaryFormatter();
              var b = (MinkowskiDifferenceShape)deserializer.Deserialize(stream);

              Assert.AreEqual(a.ObjectA.Pose, b.ObjectA.Pose);
              Assert.AreEqual(a.ObjectB.Pose, b.ObjectB.Pose);
              Assert.AreEqual(((PointShape)a.ObjectA.Shape).Position, ((PointShape)b.ObjectA.Shape).Position);
              Assert.AreEqual(((PointShape)a.ObjectB.Shape).Position, ((PointShape)b.ObjectB.Shape).Position);
        }
Ejemplo n.º 13
0
        public void GetSupportPoint()
        {
            Assert.AreEqual(new Vector3F(0, 0, 0), new MinkowskiDifferenceShape().GetSupportPoint(new Vector3F(1, 0, 0)));
              Assert.AreEqual(new Vector3F(0, 0, 0), new MinkowskiDifferenceShape().GetSupportPoint(new Vector3F(0, 1, 0)));
              Assert.AreEqual(new Vector3F(0, 0, 0), new MinkowskiDifferenceShape().GetSupportPoint(new Vector3F(0, 0, 1)));
              Assert.AreEqual(new Vector3F(0, 0, 0), new MinkowskiDifferenceShape().GetSupportPoint(new Vector3F(1, 1, 1)));

              Assert.IsTrue(Vector3F.AreNumericallyEqual(new Vector3F(4, 5, 0), cs.GetSupportPoint(new Vector3F(1, 0, 0))));
              Assert.IsTrue(Vector3F.AreNumericallyEqual(new Vector3F(4, 5, 0), cs.GetSupportPoint(new Vector3F(0, 1, 0))));
              Assert.IsTrue(Vector3F.AreNumericallyEqual(new Vector3F(1, 5, 3), cs.GetSupportPoint(new Vector3F(0, 0, 1))));
              Assert.IsTrue(Vector3F.AreNumericallyEqual(new Vector3F(-2, 5, 0), cs.GetSupportPoint(new Vector3F(-1, 0, 0))));
              Assert.IsTrue(Vector3F.AreNumericallyEqual(new Vector3F(4, -5, 0), cs.GetSupportPoint(new Vector3F(0, -1, 0))));

              MinkowskiDifferenceShape m = new MinkowskiDifferenceShape();
              ((GeometricObject)m.ObjectB).Shape = new LineSegmentShape(new Vector3F(1, 0, 0), new Vector3F(3, 0, 0));
              Assert.AreEqual(new Vector3F(-1, 0, 0), m.GetSupportPoint(new Vector3F(1, 1, 0)));
              ((GeometricObject)m.ObjectB).Pose = new Pose(new Vector3F(1, 1, 0), QuaternionF.Identity);
              Assert.AreEqual(new Vector3F(-2, -1, 0), m.GetSupportPoint(new Vector3F(1, 1, 0)));
              ((GeometricObject)m.ObjectA).Shape = new CircleShape(20);
              Assert.AreEqual(new Vector3F(18, -1, 0), m.GetSupportPoint(new Vector3F(1, 0, 0)));
        }