public void GetAxisAlignedBoundingBox() { Assert.AreEqual(new Aabb(new Vector3(0, -100, 0), new Vector3(1000, 0, 1000)), new HeightField().GetAabb(Pose.Identity)); Assert.AreEqual(new Aabb(new Vector3(1000, -101, 2000), new Vector3(1100, 5, 2200)), _field.GetAabb(Pose.Identity)); Assert.AreEqual(new Aabb(new Vector3(0, -1, 0), new Vector3(10, 5, 20)), new HeightField(0, 0, 10, 20, _samples, 3, 8) { Depth = 0 }.GetAabb(Pose.Identity)); // Now with pose. Quaternion rotation = Quaternion.CreateRotationX(0.2f); Pose pose = new Pose(new Vector3(1, 1, 1), rotation); _field.Depth = 0; var box = new TransformedShape( new GeometricObject(new BoxShape(100, 6, 200), new Pose(new Vector3(1050, 2, 2100)))); Assert.IsTrue(Vector3.AreNumericallyEqual(box.GetAabb(pose).Minimum, _field.GetAabb(pose).Minimum)); _field.Depth = 4; box = new TransformedShape( new GeometricObject(new BoxShape(100, 10, 200), new Pose(new Vector3(1000, 0, 2000)))); Assert.IsTrue(Vector3.AreNumericallyEqual(box.GetAabb(pose).Minimum + rotation.Rotate(new Vector3(50, 0, 100)), _field.GetAabb(pose).Minimum)); }
public void GetAabb() { Assert.AreEqual(new Vector3F(0, 0, 0), new TransformedShape().GetAabb(Pose.Identity).Minimum); Assert.AreEqual(new Vector3F(0, 0, 0), new TransformedShape().GetAabb(Pose.Identity).Maximum); TransformedShape t = new TransformedShape { Child = new GeometricObject { Pose = new Pose(new Vector3F(0, 1, 0)), Shape = new SphereShape(10), }, }; Assert.AreEqual(new Vector3F(-10, -9, -10), t.GetAabb(Pose.Identity).Minimum); Assert.AreEqual(new Vector3F(10, 11, 10), t.GetAabb(Pose.Identity).Maximum); Assert.AreEqual(new Vector3F(-8, -9, -10), t.GetAabb(new Pose(new Vector3F(2, 0, 0))).Minimum); Assert.AreEqual(new Vector3F(12, 11, 10), t.GetAabb(new Pose(new Vector3F(2, 0, 0))).Maximum); }
public void Clone() { Pose pose = new Pose(new Vector3F(1, 2, 3)); PointShape pointShape = new PointShape(3, 4, 5); GeometricObject geometry = new GeometricObject(pointShape, pose); TransformedShape transformedShape = new TransformedShape(geometry); TransformedShape clone = transformedShape.Clone() as TransformedShape; Assert.IsNotNull(clone); Assert.IsNotNull(clone.Child); Assert.AreNotSame(geometry, clone.Child); Assert.IsTrue(clone.Child is GeometricObject); Assert.AreEqual(pose, clone.Child.Pose); Assert.IsNotNull(clone.Child.Shape); Assert.AreNotSame(pointShape, clone.Child.Shape); Assert.IsTrue(clone.Child.Shape is PointShape); Assert.AreEqual(pointShape.Position, ((PointShape)clone.Child.Shape).Position); Assert.AreEqual(transformedShape.GetAabb(Pose.Identity).Minimum, clone.GetAabb(Pose.Identity).Minimum); Assert.AreEqual(transformedShape.GetAabb(Pose.Identity).Maximum, clone.GetAabb(Pose.Identity).Maximum); }
public void GetAabb() { Assert.AreEqual(new Vector3(0, 0, 0), new TransformedShape().GetAabb(Pose.Identity).Minimum); Assert.AreEqual(new Vector3(0, 0, 0), new TransformedShape().GetAabb(Pose.Identity).Maximum); TransformedShape t = new TransformedShape { Child = new GeometricObject { Pose = new Pose(new Vector3(0, 1, 0)), Shape = new SphereShape(10), }, }; Assert.AreEqual(new Vector3(-10, -9, -10), t.GetAabb(Pose.Identity).Minimum); Assert.AreEqual(new Vector3(10, 11, 10), t.GetAabb(Pose.Identity).Maximum); Assert.AreEqual(new Vector3(-8, -9, -10), t.GetAabb(new Pose(new Vector3(2, 0, 0))).Minimum); Assert.AreEqual(new Vector3(12, 11, 10), t.GetAabb(new Pose(new Vector3(2, 0, 0))).Maximum); }
public void Clone() { Pose pose = new Pose(new Vector3(1, 2, 3)); PointShape pointShape = new PointShape(3, 4, 5); GeometricObject geometry = new GeometricObject(pointShape, pose); TransformedShape transformedShape = new TransformedShape(geometry); TransformedShape clone = transformedShape.Clone() as TransformedShape; Assert.IsNotNull(clone); Assert.IsNotNull(clone.Child); Assert.AreNotSame(geometry, clone.Child); Assert.IsTrue(clone.Child is GeometricObject); Assert.AreEqual(pose, clone.Child.Pose); Assert.IsNotNull(clone.Child.Shape); Assert.AreNotSame(pointShape, clone.Child.Shape); Assert.IsTrue(clone.Child.Shape is PointShape); Assert.AreEqual(pointShape.Position, ((PointShape)clone.Child.Shape).Position); Assert.AreEqual(transformedShape.GetAabb(Pose.Identity).Minimum, clone.GetAabb(Pose.Identity).Minimum); Assert.AreEqual(transformedShape.GetAabb(Pose.Identity).Maximum, clone.GetAabb(Pose.Identity).Maximum); }
public void GetAxisAlignedBoundingBox() { Assert.AreEqual(new Aabb(new Vector3F(0, -100, 0), new Vector3F(1000, 0, 1000)), new HeightField().GetAabb(Pose.Identity)); Assert.AreEqual(new Aabb(new Vector3F(1000, -101, 2000), new Vector3F(1100, 5, 2200)), _field.GetAabb(Pose.Identity)); Assert.AreEqual(new Aabb(new Vector3F(0, -1, 0), new Vector3F(10, 5, 20)), new HeightField(0, 0, 10, 20, _samples, 3, 8) { Depth = 0 }.GetAabb(Pose.Identity)); // Now with pose. QuaternionF rotation = QuaternionF.CreateRotationX(0.2f); Pose pose = new Pose(new Vector3F(1, 1, 1), rotation); _field.Depth = 0; var box = new TransformedShape( new GeometricObject(new BoxShape(100, 6, 200), new Pose(new Vector3F(1050, 2, 2100)))); Assert.IsTrue(Vector3F.AreNumericallyEqual(box.GetAabb(pose).Minimum, _field.GetAabb(pose).Minimum)); _field.Depth = 4; box = new TransformedShape( new GeometricObject(new BoxShape(100, 10, 200), new Pose(new Vector3F(1000, 0, 2000)))); Assert.IsTrue(Vector3F.AreNumericallyEqual(box.GetAabb(pose).Minimum + rotation.Rotate(new Vector3F(50, 0, 100)), _field.GetAabb(pose).Minimum)); }