public void ComputeCollisionLineOther() { CollisionObject line0 = new CollisionObject(); //line0.Name = "line0"; ((GeometricObject)line0.GeometricObject).Shape = new LineShape(new Vector3(0, 0, 1), new Vector3(1, 0, 0)); ((GeometricObject)line0.GeometricObject).Pose = new Pose(new Vector3(0, 0, 2)); CollisionObject sphere = new CollisionObject(); //sphere.Name = "sphere"; ((GeometricObject)sphere.GeometricObject).Shape = new SphereShape(1); ((GeometricObject)sphere.GeometricObject).Pose = Pose.Identity; LineAlgorithm algo = new LineAlgorithm(new CollisionDetection()); ContactSet set; set = algo.GetClosestPoints(line0, sphere); Assert.IsTrue(Numeric.AreEqual(-2, set[0].PenetrationDepth)); Assert.IsTrue(Vector3.AreNumericallyEqual(-Vector3.UnitZ, set[0].Normal)); Assert.IsTrue(Vector3.AreNumericallyEqual(new Vector3(0, 0, 2), set[0].Position, 0.001f)); Assert.IsTrue(Vector3.AreNumericallyEqual(new Vector3(0, 0, 1), set[0].PositionALocal, 0.001f)); Assert.AreEqual(false, algo.HaveContact(line0, sphere)); set = set.Swapped; ((GeometricObject)sphere.GeometricObject).Pose = new Pose(new Vector3(0, 0, 2.1f)); algo.UpdateContacts(set, 0); Assert.IsTrue(Numeric.AreEqual(0.1f, set[0].PenetrationDepth, 0.001f)); Assert.IsTrue(Vector3.AreNumericallyEqual(Vector3.UnitZ, set[0].Normal, 0.1f)); // Large epsilon because MPR for spheres is not very accurate. Assert.IsTrue(Vector3.AreNumericallyEqual(new Vector3(0, 0, 3), set[0].Position, 0.1f)); Assert.IsTrue(Vector3.AreNumericallyEqual(new Vector3(0, 0, 1), set[0].PositionALocal, 0.1f)); Assert.IsTrue(Vector3.AreNumericallyEqual(new Vector3(0, 0, 1), set[0].PositionBLocal, 0.1f)); Assert.AreEqual(true, algo.HaveContact(line0, sphere)); }
public void ComputeCollisionLineOther() { CollisionObject line0 = new CollisionObject(); //line0.Name = "line0"; ((GeometricObject)line0.GeometricObject).Shape = new LineShape(new Vector3F(0, 0, 1), new Vector3F(1, 0, 0)); ((GeometricObject)line0.GeometricObject).Pose = new Pose(new Vector3F(0, 0, 2)); CollisionObject sphere = new CollisionObject(); //sphere.Name = "sphere"; ((GeometricObject)sphere.GeometricObject).Shape = new SphereShape(1); ((GeometricObject)sphere.GeometricObject).Pose = Pose.Identity; LineAlgorithm algo = new LineAlgorithm(new CollisionDetection()); ContactSet set; set = algo.GetClosestPoints(line0, sphere); Assert.IsTrue(Numeric.AreEqual(-2, set[0].PenetrationDepth)); Assert.IsTrue(Vector3F.AreNumericallyEqual(-Vector3F.UnitZ, set[0].Normal)); Assert.IsTrue(Vector3F.AreNumericallyEqual(new Vector3F(0, 0, 2), set[0].Position, 0.001f)); Assert.IsTrue(Vector3F.AreNumericallyEqual(new Vector3F(0, 0, 1), set[0].PositionALocal, 0.001f)); Assert.AreEqual(false, algo.HaveContact(line0, sphere)); set = set.Swapped; ((GeometricObject)sphere.GeometricObject).Pose = new Pose(new Vector3F(0, 0, 2.1f)); algo.UpdateContacts(set, 0); Assert.IsTrue(Numeric.AreEqual(0.1f, set[0].PenetrationDepth, 0.001f)); Assert.IsTrue(Vector3F.AreNumericallyEqual(Vector3F.UnitZ, set[0].Normal, 0.1f)); // Large epsilon because MPR for spheres is not very accurate. Assert.IsTrue(Vector3F.AreNumericallyEqual(new Vector3F(0, 0, 3), set[0].Position, 0.1f)); Assert.IsTrue(Vector3F.AreNumericallyEqual(new Vector3F(0, 0, 1), set[0].PositionALocal, 0.1f)); Assert.IsTrue(Vector3F.AreNumericallyEqual(new Vector3F(0, 0, 1), set[0].PositionBLocal, 0.1f)); Assert.AreEqual(true, algo.HaveContact(line0, sphere)); }
public void ComputeCollisionLineLine() { CollisionObject line0 = new CollisionObject(new GeometricObject { Shape = new LineShape(new Vector3F(1, 2, 3), new Vector3F(1, 0, 0)), }); //line0.Name = "line0"; CollisionObject line1 = new CollisionObject(new GeometricObject { Shape = new LineShape(new Vector3F(0, 0, 1), new Vector3F(1, 0, 0)), }); //line1.Name = "line1"; LineAlgorithm algo = new LineAlgorithm(new CollisionDetection()); ContactSet set; ((GeometricObject)line1.GeometricObject).Pose = new Pose(new Vector3F(1, 2, 2), line1.GeometricObject.Pose.Orientation); set = algo.GetClosestPoints(line0, line1); Assert.AreEqual(0, set[0].PenetrationDepth); Assert.AreEqual(Vector3F.UnitY, set[0].Normal); Assert.AreEqual(true, algo.HaveContact(line0, line1)); ((GeometricObject)line1.GeometricObject).Pose = new Pose(line1.GeometricObject.Pose.Position, QuaternionF.CreateRotationZ(ConstantsF.PiOver2)); set = algo.GetClosestPoints(line0, line1); Assert.IsTrue(Numeric.AreEqual(0, set[0].PenetrationDepth)); Assert.AreEqual(new Vector3F(1, 2, 3), set[0].Position); Assert.IsTrue(Vector3F.AreNumericallyEqual(Vector3F.UnitZ, set[0].Normal)); Assert.AreEqual(true, algo.HaveContact(line0, line1)); ((GeometricObject)line1.GeometricObject).Pose = new Pose(new Vector3F(1, 2, 4), QuaternionF.CreateRotationZ(ConstantsF.PiOver2)); set = algo.GetClosestPoints(line1, line0); Assert.IsTrue(Numeric.AreEqual(-2, set[0].PenetrationDepth)); Assert.AreEqual(new Vector3F(1, 2, 4), set[0].Position); Assert.AreEqual(-Vector3F.UnitZ, set[0].Normal); Assert.AreEqual(false, algo.HaveContact(line0, line1)); algo.UpdateContacts(set, 0.01f); Assert.AreEqual(0, set.Count); }
public void ComputeCollisionLineLine() { CollisionObject line0 = new CollisionObject(new GeometricObject { Shape = new LineShape(new Vector3(1, 2, 3), new Vector3(1, 0, 0)), }); //line0.Name = "line0"; CollisionObject line1 = new CollisionObject(new GeometricObject { Shape = new LineShape(new Vector3(0, 0, 1), new Vector3(1, 0, 0)), }); //line1.Name = "line1"; LineAlgorithm algo = new LineAlgorithm(new CollisionDetection()); ContactSet set; ((GeometricObject)line1.GeometricObject).Pose = new Pose(new Vector3(1, 2, 2), line1.GeometricObject.Pose.Orientation); set = algo.GetClosestPoints(line0, line1); Assert.AreEqual(0, set[0].PenetrationDepth); Assert.AreEqual(Vector3.UnitY, set[0].Normal); Assert.AreEqual(true, algo.HaveContact(line0, line1)); ((GeometricObject)line1.GeometricObject).Pose = new Pose(line1.GeometricObject.Pose.Position, Quaternion.CreateRotationZ(ConstantsF.PiOver2)); set = algo.GetClosestPoints(line0, line1); Assert.IsTrue(Numeric.AreEqual(0, set[0].PenetrationDepth)); Assert.AreEqual(new Vector3(1, 2, 3), set[0].Position); Assert.IsTrue(Vector3.AreNumericallyEqual(Vector3.UnitZ, set[0].Normal)); Assert.AreEqual(true, algo.HaveContact(line0, line1)); ((GeometricObject)line1.GeometricObject).Pose = new Pose(new Vector3(1, 2, 4), Quaternion.CreateRotationZ(ConstantsF.PiOver2)); set = algo.GetClosestPoints(line1, line0); Assert.IsTrue(Numeric.AreEqual(-2, set[0].PenetrationDepth)); Assert.AreEqual(new Vector3(1, 2, 4), set[0].Position); Assert.AreEqual(-Vector3.UnitZ, set[0].Normal); Assert.AreEqual(false, algo.HaveContact(line0, line1)); algo.UpdateContacts(set, 0.01f); Assert.AreEqual(0, set.Count); }
/// <summary> /// Initializes a new instance of LineSeries class with a given mapper /// </summary> /// <param name="configuration"></param> public LineSeries(object configuration) { Model = new LineAlgorithm(this); Configuration = configuration; InitializeDefuaults(); }
/// <summary> /// Initializes a new instance of LineSeries class /// </summary> public LineSeries() { Model = new LineAlgorithm(this); InitializeDefuaults(); }
public void ComputeCollisionException() { LineAlgorithm algo = new LineAlgorithm(new CollisionDetection()); algo.GetClosestPoints(new CollisionObject(), new CollisionObject()); // no line! }
public CollisionAlgorithmMatrix(CollisionDetection collisionDetection) { // Initialize with dummy collision algorithms. var noAlgo = new NoCollisionAlgorithm(collisionDetection); // Definitely no collision wanted. var infiniteAlgo = new InfiniteShapeAlgorithm(collisionDetection); // Returns always a collision. // Build default configuration: var gjk = new Gjk(collisionDetection); var gjkBoxAlgorithm = new CombinedCollisionAlgorithm(collisionDetection, gjk, new BoxBoxAlgorithm(collisionDetection)); var gjkMprAlgorithm = new CombinedCollisionAlgorithm(collisionDetection, gjk, new MinkowskiPortalRefinement(collisionDetection)); var gjkTriTriAlgorithm = new CombinedCollisionAlgorithm(collisionDetection, gjk, new TriangleTriangleAlgorithm(collisionDetection)); BoxSphereAlgorithm boxSphereAlgorithm = new BoxSphereAlgorithm(collisionDetection); CompositeShapeAlgorithm compositeAlgorithm = new CompositeShapeAlgorithm(collisionDetection); HeightFieldAlgorithm heightFieldAlgorithm = new HeightFieldAlgorithm(collisionDetection); LineAlgorithm lineAlgorithm = new LineAlgorithm(collisionDetection); PlaneBoxAlgorithm planeBoxAlgorithm = new PlaneBoxAlgorithm(collisionDetection); PlaneConvexAlgorithm planeConvexAlgorithm = new PlaneConvexAlgorithm(collisionDetection); PlaneRayAlgorithm planeRayAlgorithm = new PlaneRayAlgorithm(collisionDetection); PlaneSphereAlgorithm planeSphereAlgorithm = new PlaneSphereAlgorithm(collisionDetection); RayBoxAlgorithm rayBoxAlgorithm = new RayBoxAlgorithm(collisionDetection); RayConvexAlgorithm rayConvexAlgorithm = new RayConvexAlgorithm(collisionDetection); RaySphereAlgorithm raySphereAlgorithm = new RaySphereAlgorithm(collisionDetection); RayTriangleAlgorithm rayTriangleAlgorithm = new RayTriangleAlgorithm(collisionDetection); SphereSphereAlgorithm sphereSphereAlgorithm = new SphereSphereAlgorithm(collisionDetection); TransformedShapeAlgorithm transformedShapeAlgorithm = new TransformedShapeAlgorithm(collisionDetection); TriangleMeshAlgorithm triangleMeshAlgorithm = new TriangleMeshAlgorithm(collisionDetection); RayCompositeAlgorithm rayCompositeAlgorithm = new RayCompositeAlgorithm(collisionDetection); RayTriangleMeshAlgorithm rayTriangleMeshAlgorithm = new RayTriangleMeshAlgorithm(collisionDetection); RayHeightFieldAlgorithm rayHeightFieldAlgorithm = new RayHeightFieldAlgorithm(collisionDetection); this[typeof(PointShape), typeof(PointShape)] = gjkMprAlgorithm; this[typeof(PointShape), typeof(LineShape)] = lineAlgorithm; this[typeof(PointShape), typeof(RayShape)] = rayConvexAlgorithm; this[typeof(PointShape), typeof(LineSegmentShape)] = gjkMprAlgorithm; this[typeof(PointShape), typeof(TriangleShape)] = gjkMprAlgorithm; this[typeof(PointShape), typeof(RectangleShape)] = gjkMprAlgorithm; this[typeof(PointShape), typeof(BoxShape)] = gjkMprAlgorithm; this[typeof(PointShape), typeof(ConvexShape)] = gjkMprAlgorithm; this[typeof(PointShape), typeof(ScaledConvexShape)] = gjkMprAlgorithm; this[typeof(PointShape), typeof(CircleShape)] = gjkMprAlgorithm; this[typeof(PointShape), typeof(SphereShape)] = gjkMprAlgorithm; this[typeof(PointShape), typeof(CapsuleShape)] = gjkMprAlgorithm; this[typeof(PointShape), typeof(ConeShape)] = gjkMprAlgorithm; this[typeof(PointShape), typeof(CylinderShape)] = gjkMprAlgorithm; this[typeof(PointShape), typeof(EmptyShape)] = noAlgo; this[typeof(PointShape), typeof(InfiniteShape)] = infiniteAlgo; this[typeof(PointShape), typeof(PlaneShape)] = planeConvexAlgorithm; this[typeof(PointShape), typeof(HeightField)] = heightFieldAlgorithm; this[typeof(PointShape), typeof(TriangleMeshShape)] = triangleMeshAlgorithm; this[typeof(PointShape), typeof(TransformedShape)] = transformedShapeAlgorithm; this[typeof(PointShape), typeof(CompositeShape)] = compositeAlgorithm; this[typeof(LineShape), typeof(LineShape)] = lineAlgorithm; this[typeof(LineShape), typeof(RayShape)] = lineAlgorithm; this[typeof(LineShape), typeof(LineSegmentShape)] = lineAlgorithm; this[typeof(LineShape), typeof(TriangleShape)] = lineAlgorithm; this[typeof(LineShape), typeof(RectangleShape)] = lineAlgorithm; this[typeof(LineShape), typeof(BoxShape)] = lineAlgorithm; this[typeof(LineShape), typeof(ConvexShape)] = lineAlgorithm; this[typeof(LineShape), typeof(ScaledConvexShape)] = lineAlgorithm; this[typeof(LineShape), typeof(CircleShape)] = lineAlgorithm; this[typeof(LineShape), typeof(SphereShape)] = lineAlgorithm; this[typeof(LineShape), typeof(CapsuleShape)] = lineAlgorithm; this[typeof(LineShape), typeof(ConeShape)] = lineAlgorithm; this[typeof(LineShape), typeof(CylinderShape)] = lineAlgorithm; this[typeof(LineShape), typeof(EmptyShape)] = noAlgo; this[typeof(LineShape), typeof(InfiniteShape)] = infiniteAlgo; this[typeof(LineShape), typeof(PlaneShape)] = noAlgo; this[typeof(LineShape), typeof(HeightField)] = noAlgo; this[typeof(LineShape), typeof(TriangleMeshShape)] = lineAlgorithm; this[typeof(LineShape), typeof(TransformedShape)] = lineAlgorithm; this[typeof(LineShape), typeof(CompositeShape)] = lineAlgorithm; this[typeof(RayShape), typeof(RayShape)] = noAlgo; this[typeof(RayShape), typeof(LineSegmentShape)] = rayConvexAlgorithm; this[typeof(RayShape), typeof(TriangleShape)] = rayTriangleAlgorithm; this[typeof(RayShape), typeof(RectangleShape)] = rayConvexAlgorithm; this[typeof(RayShape), typeof(BoxShape)] = rayBoxAlgorithm; this[typeof(RayShape), typeof(ConvexShape)] = rayConvexAlgorithm; this[typeof(RayShape), typeof(ScaledConvexShape)] = rayConvexAlgorithm; this[typeof(RayShape), typeof(CircleShape)] = rayConvexAlgorithm; this[typeof(RayShape), typeof(SphereShape)] = raySphereAlgorithm; this[typeof(RayShape), typeof(CapsuleShape)] = rayConvexAlgorithm; this[typeof(RayShape), typeof(ConeShape)] = rayConvexAlgorithm; this[typeof(RayShape), typeof(CylinderShape)] = rayConvexAlgorithm; this[typeof(RayShape), typeof(EmptyShape)] = noAlgo; this[typeof(RayShape), typeof(InfiniteShape)] = infiniteAlgo; this[typeof(RayShape), typeof(PlaneShape)] = planeRayAlgorithm; this[typeof(RayShape), typeof(HeightField)] = rayHeightFieldAlgorithm; this[typeof(RayShape), typeof(TriangleMeshShape)] = rayTriangleMeshAlgorithm; this[typeof(RayShape), typeof(TransformedShape)] = transformedShapeAlgorithm; this[typeof(RayShape), typeof(CompositeShape)] = rayCompositeAlgorithm; this[typeof(LineSegmentShape), typeof(LineSegmentShape)] = gjkMprAlgorithm; this[typeof(LineSegmentShape), typeof(TriangleShape)] = gjkMprAlgorithm; this[typeof(LineSegmentShape), typeof(RectangleShape)] = gjkMprAlgorithm; this[typeof(LineSegmentShape), typeof(BoxShape)] = gjkMprAlgorithm; this[typeof(LineSegmentShape), typeof(ConvexShape)] = gjkMprAlgorithm; this[typeof(LineSegmentShape), typeof(ScaledConvexShape)] = gjkMprAlgorithm; this[typeof(LineSegmentShape), typeof(CircleShape)] = gjkMprAlgorithm; this[typeof(LineSegmentShape), typeof(SphereShape)] = gjkMprAlgorithm; this[typeof(LineSegmentShape), typeof(CapsuleShape)] = gjkMprAlgorithm; this[typeof(LineSegmentShape), typeof(ConeShape)] = gjkMprAlgorithm; this[typeof(LineSegmentShape), typeof(CylinderShape)] = gjkMprAlgorithm; this[typeof(LineSegmentShape), typeof(EmptyShape)] = noAlgo; this[typeof(LineSegmentShape), typeof(InfiniteShape)] = infiniteAlgo; this[typeof(LineSegmentShape), typeof(PlaneShape)] = planeConvexAlgorithm; this[typeof(LineSegmentShape), typeof(HeightField)] = heightFieldAlgorithm; this[typeof(LineSegmentShape), typeof(TriangleMeshShape)] = triangleMeshAlgorithm; this[typeof(LineSegmentShape), typeof(TransformedShape)] = transformedShapeAlgorithm; this[typeof(LineSegmentShape), typeof(CompositeShape)] = compositeAlgorithm; this[typeof(TriangleShape), typeof(TriangleShape)] = gjkTriTriAlgorithm; this[typeof(TriangleShape), typeof(RectangleShape)] = gjkMprAlgorithm; this[typeof(TriangleShape), typeof(BoxShape)] = gjkMprAlgorithm; this[typeof(TriangleShape), typeof(ConvexShape)] = gjkMprAlgorithm; this[typeof(TriangleShape), typeof(ScaledConvexShape)] = gjkMprAlgorithm; this[typeof(TriangleShape), typeof(CircleShape)] = gjkMprAlgorithm; this[typeof(TriangleShape), typeof(SphereShape)] = gjkMprAlgorithm; this[typeof(TriangleShape), typeof(CapsuleShape)] = gjkMprAlgorithm; this[typeof(TriangleShape), typeof(ConeShape)] = gjkMprAlgorithm; this[typeof(TriangleShape), typeof(CylinderShape)] = gjkMprAlgorithm; this[typeof(TriangleShape), typeof(EmptyShape)] = noAlgo; this[typeof(TriangleShape), typeof(InfiniteShape)] = infiniteAlgo; this[typeof(TriangleShape), typeof(PlaneShape)] = planeConvexAlgorithm; this[typeof(TriangleShape), typeof(HeightField)] = heightFieldAlgorithm; this[typeof(TriangleShape), typeof(TriangleMeshShape)] = triangleMeshAlgorithm; this[typeof(TriangleShape), typeof(TransformedShape)] = transformedShapeAlgorithm; this[typeof(TriangleShape), typeof(CompositeShape)] = compositeAlgorithm; this[typeof(RectangleShape), typeof(RectangleShape)] = gjkMprAlgorithm; this[typeof(RectangleShape), typeof(BoxShape)] = gjkMprAlgorithm; this[typeof(RectangleShape), typeof(ConvexShape)] = gjkMprAlgorithm; this[typeof(RectangleShape), typeof(ScaledConvexShape)] = gjkMprAlgorithm; this[typeof(RectangleShape), typeof(CircleShape)] = gjkMprAlgorithm; this[typeof(RectangleShape), typeof(SphereShape)] = gjkMprAlgorithm; this[typeof(RectangleShape), typeof(CapsuleShape)] = gjkMprAlgorithm; this[typeof(RectangleShape), typeof(ConeShape)] = gjkMprAlgorithm; this[typeof(RectangleShape), typeof(CylinderShape)] = gjkMprAlgorithm; this[typeof(RectangleShape), typeof(EmptyShape)] = noAlgo; this[typeof(RectangleShape), typeof(InfiniteShape)] = infiniteAlgo; this[typeof(RectangleShape), typeof(PlaneShape)] = planeConvexAlgorithm; this[typeof(RectangleShape), typeof(HeightField)] = heightFieldAlgorithm; this[typeof(RectangleShape), typeof(TriangleMeshShape)] = triangleMeshAlgorithm; this[typeof(RectangleShape), typeof(TransformedShape)] = transformedShapeAlgorithm; this[typeof(RectangleShape), typeof(CompositeShape)] = compositeAlgorithm; this[typeof(BoxShape), typeof(BoxShape)] = gjkBoxAlgorithm; this[typeof(BoxShape), typeof(ConvexShape)] = gjkMprAlgorithm; this[typeof(BoxShape), typeof(ScaledConvexShape)] = gjkMprAlgorithm; this[typeof(BoxShape), typeof(CircleShape)] = gjkMprAlgorithm; this[typeof(BoxShape), typeof(SphereShape)] = boxSphereAlgorithm; this[typeof(BoxShape), typeof(CapsuleShape)] = gjkMprAlgorithm; this[typeof(BoxShape), typeof(ConeShape)] = gjkMprAlgorithm; this[typeof(BoxShape), typeof(CylinderShape)] = gjkMprAlgorithm; this[typeof(BoxShape), typeof(EmptyShape)] = noAlgo; this[typeof(BoxShape), typeof(InfiniteShape)] = infiniteAlgo; this[typeof(BoxShape), typeof(PlaneShape)] = planeBoxAlgorithm; this[typeof(BoxShape), typeof(HeightField)] = heightFieldAlgorithm; this[typeof(BoxShape), typeof(TriangleMeshShape)] = triangleMeshAlgorithm; this[typeof(BoxShape), typeof(TransformedShape)] = transformedShapeAlgorithm; this[typeof(BoxShape), typeof(CompositeShape)] = compositeAlgorithm; this[typeof(ConvexShape), typeof(ConvexShape)] = gjkMprAlgorithm; this[typeof(ConvexShape), typeof(ScaledConvexShape)] = gjkMprAlgorithm; this[typeof(ConvexShape), typeof(CircleShape)] = gjkMprAlgorithm; this[typeof(ConvexShape), typeof(SphereShape)] = gjkMprAlgorithm; this[typeof(ConvexShape), typeof(CapsuleShape)] = gjkMprAlgorithm; this[typeof(ConvexShape), typeof(ConeShape)] = gjkMprAlgorithm; this[typeof(ConvexShape), typeof(CylinderShape)] = gjkMprAlgorithm; this[typeof(ConvexShape), typeof(EmptyShape)] = noAlgo; this[typeof(ConvexShape), typeof(InfiniteShape)] = infiniteAlgo; this[typeof(ConvexShape), typeof(PlaneShape)] = planeConvexAlgorithm; this[typeof(ConvexShape), typeof(HeightField)] = heightFieldAlgorithm; this[typeof(ConvexShape), typeof(TriangleMeshShape)] = triangleMeshAlgorithm; this[typeof(ConvexShape), typeof(TransformedShape)] = transformedShapeAlgorithm; this[typeof(ConvexShape), typeof(CompositeShape)] = compositeAlgorithm; this[typeof(ScaledConvexShape), typeof(ScaledConvexShape)] = gjkMprAlgorithm; this[typeof(ScaledConvexShape), typeof(CircleShape)] = gjkMprAlgorithm; this[typeof(ScaledConvexShape), typeof(SphereShape)] = gjkMprAlgorithm; this[typeof(ScaledConvexShape), typeof(CapsuleShape)] = gjkMprAlgorithm; this[typeof(ScaledConvexShape), typeof(ConeShape)] = gjkMprAlgorithm; this[typeof(ScaledConvexShape), typeof(CylinderShape)] = gjkMprAlgorithm; this[typeof(ScaledConvexShape), typeof(EmptyShape)] = noAlgo; this[typeof(ScaledConvexShape), typeof(InfiniteShape)] = infiniteAlgo; this[typeof(ScaledConvexShape), typeof(PlaneShape)] = planeConvexAlgorithm; this[typeof(ScaledConvexShape), typeof(HeightField)] = heightFieldAlgorithm; this[typeof(ScaledConvexShape), typeof(TriangleMeshShape)] = triangleMeshAlgorithm; this[typeof(ScaledConvexShape), typeof(TransformedShape)] = transformedShapeAlgorithm; this[typeof(ScaledConvexShape), typeof(CompositeShape)] = compositeAlgorithm; this[typeof(CircleShape), typeof(CircleShape)] = gjkMprAlgorithm; this[typeof(CircleShape), typeof(SphereShape)] = gjkMprAlgorithm; this[typeof(CircleShape), typeof(CapsuleShape)] = gjkMprAlgorithm; this[typeof(CircleShape), typeof(ConeShape)] = gjkMprAlgorithm; this[typeof(CircleShape), typeof(CylinderShape)] = gjkMprAlgorithm; this[typeof(CircleShape), typeof(EmptyShape)] = noAlgo; this[typeof(CircleShape), typeof(InfiniteShape)] = infiniteAlgo; this[typeof(CircleShape), typeof(PlaneShape)] = planeConvexAlgorithm; this[typeof(CircleShape), typeof(HeightField)] = heightFieldAlgorithm; this[typeof(CircleShape), typeof(TriangleMeshShape)] = triangleMeshAlgorithm; this[typeof(CircleShape), typeof(TransformedShape)] = transformedShapeAlgorithm; this[typeof(CircleShape), typeof(CompositeShape)] = compositeAlgorithm; this[typeof(SphereShape), typeof(SphereShape)] = sphereSphereAlgorithm; this[typeof(SphereShape), typeof(CapsuleShape)] = gjkMprAlgorithm; this[typeof(SphereShape), typeof(ConeShape)] = gjkMprAlgorithm; this[typeof(SphereShape), typeof(CylinderShape)] = gjkMprAlgorithm; this[typeof(SphereShape), typeof(EmptyShape)] = noAlgo; this[typeof(SphereShape), typeof(InfiniteShape)] = infiniteAlgo; this[typeof(SphereShape), typeof(PlaneShape)] = planeSphereAlgorithm; this[typeof(SphereShape), typeof(HeightField)] = heightFieldAlgorithm; this[typeof(SphereShape), typeof(TriangleMeshShape)] = triangleMeshAlgorithm; this[typeof(SphereShape), typeof(TransformedShape)] = transformedShapeAlgorithm; this[typeof(SphereShape), typeof(CompositeShape)] = compositeAlgorithm; this[typeof(CapsuleShape), typeof(CapsuleShape)] = gjkMprAlgorithm; this[typeof(CapsuleShape), typeof(ConeShape)] = gjkMprAlgorithm; this[typeof(CapsuleShape), typeof(CylinderShape)] = gjkMprAlgorithm; this[typeof(CapsuleShape), typeof(EmptyShape)] = noAlgo; this[typeof(CapsuleShape), typeof(InfiniteShape)] = infiniteAlgo; this[typeof(CapsuleShape), typeof(PlaneShape)] = planeConvexAlgorithm; this[typeof(CapsuleShape), typeof(HeightField)] = heightFieldAlgorithm; this[typeof(CapsuleShape), typeof(TriangleMeshShape)] = triangleMeshAlgorithm; this[typeof(CapsuleShape), typeof(TransformedShape)] = transformedShapeAlgorithm; this[typeof(CapsuleShape), typeof(CompositeShape)] = compositeAlgorithm; this[typeof(ConeShape), typeof(ConeShape)] = gjkMprAlgorithm; this[typeof(ConeShape), typeof(CylinderShape)] = gjkMprAlgorithm; this[typeof(ConeShape), typeof(EmptyShape)] = noAlgo; this[typeof(ConeShape), typeof(InfiniteShape)] = infiniteAlgo; this[typeof(ConeShape), typeof(PlaneShape)] = planeConvexAlgorithm; this[typeof(ConeShape), typeof(HeightField)] = heightFieldAlgorithm; this[typeof(ConeShape), typeof(TriangleMeshShape)] = triangleMeshAlgorithm; this[typeof(ConeShape), typeof(TransformedShape)] = transformedShapeAlgorithm; this[typeof(ConeShape), typeof(CompositeShape)] = compositeAlgorithm; this[typeof(CylinderShape), typeof(CylinderShape)] = gjkMprAlgorithm; this[typeof(CylinderShape), typeof(EmptyShape)] = noAlgo; this[typeof(CylinderShape), typeof(InfiniteShape)] = infiniteAlgo; this[typeof(CylinderShape), typeof(PlaneShape)] = planeConvexAlgorithm; this[typeof(CylinderShape), typeof(HeightField)] = heightFieldAlgorithm; this[typeof(CylinderShape), typeof(TriangleMeshShape)] = triangleMeshAlgorithm; this[typeof(CylinderShape), typeof(TransformedShape)] = transformedShapeAlgorithm; this[typeof(CylinderShape), typeof(CompositeShape)] = compositeAlgorithm; this[typeof(EmptyShape), typeof(EmptyShape)] = noAlgo; this[typeof(EmptyShape), typeof(InfiniteShape)] = noAlgo; // No collision between Empty and Infinite. this[typeof(EmptyShape), typeof(PlaneShape)] = noAlgo; this[typeof(EmptyShape), typeof(HeightField)] = noAlgo; this[typeof(EmptyShape), typeof(TriangleMeshShape)] = noAlgo; this[typeof(EmptyShape), typeof(TransformedShape)] = noAlgo; this[typeof(EmptyShape), typeof(CompositeShape)] = noAlgo; this[typeof(InfiniteShape), typeof(InfiniteShape)] = infiniteAlgo; this[typeof(InfiniteShape), typeof(PlaneShape)] = infiniteAlgo; this[typeof(InfiniteShape), typeof(HeightField)] = infiniteAlgo; this[typeof(InfiniteShape), typeof(TriangleMeshShape)] = infiniteAlgo; this[typeof(InfiniteShape), typeof(TransformedShape)] = infiniteAlgo; this[typeof(InfiniteShape), typeof(CompositeShape)] = infiniteAlgo; this[typeof(PlaneShape), typeof(PlaneShape)] = noAlgo; this[typeof(PlaneShape), typeof(HeightField)] = noAlgo; this[typeof(PlaneShape), typeof(TriangleMeshShape)] = triangleMeshAlgorithm; this[typeof(PlaneShape), typeof(TransformedShape)] = transformedShapeAlgorithm; this[typeof(PlaneShape), typeof(CompositeShape)] = compositeAlgorithm; this[typeof(HeightField), typeof(HeightField)] = noAlgo; // We could also call triangleMeshAlgorithm. But since HeightField has usually larger parts it // is better to call the heightFieldAlgorithm. The heightFieldAlgorithm will cull all but a // few height field cells very quickly. this[typeof(HeightField), typeof(TriangleMeshShape)] = heightFieldAlgorithm; this[typeof(HeightField), typeof(TransformedShape)] = transformedShapeAlgorithm; // Same as for triangle meshes: Call height field algorithm first. this[typeof(HeightField), typeof(CompositeShape)] = heightFieldAlgorithm; this[typeof(TriangleMeshShape), typeof(TriangleMeshShape)] = triangleMeshAlgorithm; this[typeof(TriangleMeshShape), typeof(TransformedShape)] = transformedShapeAlgorithm; this[typeof(TriangleMeshShape), typeof(CompositeShape)] = compositeAlgorithm; this[typeof(TransformedShape), typeof(TransformedShape)] = transformedShapeAlgorithm; this[typeof(TransformedShape), typeof(CompositeShape)] = transformedShapeAlgorithm; this[typeof(CompositeShape), typeof(CompositeShape)] = compositeAlgorithm; }