Ejemplo n.º 1
0
        public void TestCircleRectangleCollision()
        {
            // Import data
            var circle  = Circles.Circle;
            var rect    = Rects.Rect;
            var results = CircleRectTest.CircleRectResults;

            for (int obj = 0; obj < results.Length; obj++)
            {
                CollisionResult result;
                //Create objects
                CircleShape circleShape = new CircleShape(circle[results[obj].FirstShape].Center,
                                                          circle[results[obj].FirstShape].Radius);
                Collision.Transform circleTransform =
                    new Collision.Transform(circle[results[obj].FirstShape].Trans,
                                            circle[results[obj].FirstShape].Rotate);

                RectangleShape rectShape =
                    new RectangleShape(rect[results[obj].SecondShape].Center, rect[results[obj].SecondShape].Width,
                                       rect[results[obj].SecondShape].Height);

                Collision.Transform rectTransform =
                    new Collision.Transform(rect[results[obj].SecondShape].Trans,
                                            rect[results[obj].SecondShape].Rotate);

                var testResult = circleShape.IntersectsWith(circleTransform, rectShape,
                                                            rectTransform, out result);
                string err = String.Format(
                    "Circle to Rectangle test({0}) failed; Circle_ID: {1}, Rectangle_ID: {2}",
                    obj, results[obj].FirstShape, results[obj].SecondShape);
                Assert.That(results[obj].Result == testResult, err);
            }
        }
Ejemplo n.º 2
0
        public void TestCirclePolygonCollision()
        {
            // Import data
            var circle  = Circles.Circle;
            var poly    = Polygons.Poly;
            var results = CirclePolyTest.CirclePolyResults;

            for (int obj = 0; obj < results.Length; obj++)
            {
                CollisionResult result;
                //Create objects
                CircleShape circleShape = new CircleShape(circle[results[obj].FirstShape].Center,
                                                          circle[results[obj].FirstShape].Radius);
                Collision.Transform circleTransform =
                    new Collision.Transform(circle[results[obj].FirstShape].Trans,
                                            circle[results[obj].FirstShape].Rotate);

                PolygonShape        polShape     = new PolygonShape(poly[results[obj].SecondShape].Points);
                Collision.Transform polTransform =
                    new Collision.Transform(poly[results[obj].SecondShape].Trans,
                                            poly[results[obj].SecondShape].Rotate);

                var testResult = circleShape.IntersectsWith(circleTransform, polShape,
                                                            polTransform, out result);
                string err = String.Format(
                    "Circle to Polygon test({0}) failed; Circle_ID: {1}, Polygon_ID: {2}",
                    obj, results[obj].FirstShape, results[obj].SecondShape);
                Assert.That(results[obj].Result == testResult, err);
            }
        }
Ejemplo n.º 3
0
        public void TestPointCircleCollision()
        {
            // true results
            bool[] trueResults = { false, true, false, false, true };

            // Points coordinates
            float[] pointX = { -2.0f, 0, 2.0f, 2.0f, 0 };

            float[] pointY = { -2.0f, 0, 2.0f, -2.0f, 2.0f };

            //Create circle obj
            CircleShape circleShape = new CircleShape(Vector2.Zero, 2.0f);

            // Transform circle to x=0, y=0, r=2
            Collision.Transform circleTransform = new Collision.Transform(Vector2.Zero, 0);

            // Create point obj
            PointShape point = new PointShape(Vector2.Zero);

            //Create points and check collisions
            for (var obj = 0; obj < trueResults.Length; obj++)
            {
                CollisionResult     result;
                Collision.Transform pointTranform =
                    new Collision.Transform(new Vector2(pointX[obj], pointY[obj]), 0);
                var    testResult = circleShape.IntersectsWith(circleTransform, point, pointTranform, out result);
                string err        = String.Format("Point to Circle test({0}) failed; Circle:(0,0,2), Point({1}, {2})",
                                                  obj, pointX[obj], pointY[obj]);
                Assert.That(trueResults[obj] == testResult, err);
            }
        }
Ejemplo n.º 4
0
        public void TestCircleCircleCollision()
        {
            // Import data
            var circle  = Circles.Circle;
            var results = CircleCircleTest.CircleCircleResults;

            for (int obj = 0; obj < results.Length; obj++)
            {
                CollisionResult result;
                //Create circle objects
                CircleShape firstCircle = new CircleShape(circle[results[obj].FirstShape].Center,
                                                          circle[results[obj].FirstShape].Radius);
                CircleShape secondCircle = new CircleShape(circle[results[obj].SecondShape].Center,
                                                           circle[results[obj].SecondShape].Radius);
                // Transform circles
                Collision.Transform firstCircleTransform =
                    new Collision.Transform(circle[results[obj].FirstShape].Trans,
                                            circle[results[obj].FirstShape].Rotate);
                Collision.Transform secondCircleTransform =
                    new Collision.Transform(circle[results[obj].SecondShape].Trans,
                                            circle[results[obj].SecondShape].Rotate);
                var testResult = firstCircle.IntersectsWith(firstCircleTransform, secondCircle,
                                                            secondCircleTransform, out result);
                string err = String.Format("Circle to Circle test({0}) failed; Circle1_ID: {1}, Circle2_ID: {2}",
                                           obj, results[obj].FirstShape, results[obj].SecondShape);
                Assert.That(results[obj].Result == testResult, err);
            }
        }
Ejemplo n.º 5
0
        public void TestCircleRectCollision()
        {
            RectangleShape rectShape = new RectangleShape(Vector2.Zero, 0.1f, 60.0f);

            Collision.Transform rectTransform = new Collision.Transform(new Vector2(94.20413f, 7.581524f), 0.08616392f);

            CircleShape circleShape = new CircleShape(new Vector2(0, 0), 1.2f);

            Collision.Transform circleTransform = new Collision.Transform(new Vector2(110.7501f, 8.56217f), 0.05750136f);

            // circle and rect should not collide
            CollisionResult result;

            Assert.That(!circleShape.IntersectsWith(circleTransform, rectShape, rectTransform, out result), "RectangleCircle collision failed");
        }
Ejemplo n.º 6
0
        public void ManualTestCircleRectangleCollision()
        {
            CollisionResult result;

            CircleShape circleShape = new CircleShape(Vector2.Zero, 1.2f);

            Collision.Transform circleTransform =
                new Collision.Transform(new Vector2(110.7501f, 8.56217f), 0.05750136f);

            RectangleShape rectShape =
                new RectangleShape(Vector2.Zero, 0.1f, 60f);

            Collision.Transform rectTransform =
                new Collision.Transform(new Vector2(94.20413f, 7.581524f), 0.08616392f);

            var res = circleShape.IntersectsWith(circleTransform, rectShape, rectTransform, out result);

//            Console.WriteLine(res);
            Assert.That(res == false, "Error on ManualTestCircleRectangleCollision. Must be false but got True");
        }
Ejemplo n.º 7
0
        public void TestCircleCircleCollision()
        {
            // true results: not touching, intersection, touching
            bool[] trueResults = { false, true, true };
            // Points coordinates for first Shape
            float[] firstX    = { -456.001f, 0, 7.00001f };
            float[] firstY    = { 1024.945f, 0, -1.00002f };
            float[] firstRad  = { 123.4056f, 2.0f, 2.0000f };
            float[] firstTurn = { 36.554f, 137.2345f, 11.001f };
            // Points coordinates for second Shape
            float[] secondX    = { 23433.7f, 2.1234f, 11.00f };
            float[] secondY    = { -90.12345f, -1.000001f, -1.00002f };
            float[] secondRad  = { 1.00001f, 2.0034f, 2.00001f };
            float[] secondTurn = { 345.01f, 9.001f, 111.001f };


            //Create points and check collisions
            for (var obj = 0; obj < trueResults.Length; obj++)
            {
                CollisionResult result;
                //Create circle objects
                CircleShape firstCircleShape  = new CircleShape(Vector2.Zero, firstRad[obj]);
                CircleShape secondCircleShape = new CircleShape(Vector2.Zero, secondRad[obj]);

                // Transform circles
                Collision.Transform firstCircleTransform =
                    new Collision.Transform(new Vector2(firstX[obj], firstY[obj]),
                                            firstTurn[obj] * Mathf.Deg2Rad);
                Collision.Transform secondCircleTransform =
                    new Collision.Transform(new Vector2(secondX[obj], secondY[obj]),
                                            secondTurn[obj] * Mathf.Deg2Rad);
                var testResult = firstCircleShape.IntersectsWith(firstCircleTransform, secondCircleShape,
                                                                 secondCircleTransform, out result);
                string err = String.Format(
                    "Circle to Circle test({0}) failed; Circle1({1}, {2},{3}){4}° Circle2({5}, {6}, {7}){8}°", obj,
                    firstX[obj], firstY[obj], firstRad[obj], firstTurn[obj], secondX[obj], secondY[obj],
                    secondRad[obj], secondTurn[obj]);
                Assert.That(trueResults[obj] == testResult, err);
            }
        }
Ejemplo n.º 8
0
        public void TestCirclePolygonCollision()
        {
            // Circles params: center coordiantes x,y ; radius, turn
            Vector2[][] circles =
            {
                new[] { new Vector2(5.0f,   5.0f), new Vector2(2.0f,   34.098f) },
                new[] { new Vector2(-6.0f,  6.0f), new Vector2(3.0f,  324.081f) },
                new[] { new Vector2(-8.0f, -7.0f), new Vector2(4.0f,  7.00098f) },
                new[] { new Vector2(10.0f, -8.0f), new Vector2(5.0f, 104.3398f) }
            };
            //Not intersect polygon coordinates
            Vector2[][] freePol =
            {
                new[]
                {
                    new Vector2(10.3123f, 12.5321f), new Vector2(13.1701f, 15.15001f),
                    new Vector2(16.76001f, 15.15001f), new Vector2(18.8001f, 13.5701f),
                    new Vector2(17.031f, 11.091f), new Vector2(13.1001f, 11.5001f)
                },
                new[]
                {
                    new Vector2(-13.3209f, 12.00192f), new Vector2(-17.812f, 12.8202f),
                    new Vector2(-16.4001f, 17.5001f)
                },
                new[]
                {
                    new Vector2(-15.013f, -14.980001f), new Vector2(-15.1001f, -18.5001f),
                    new Vector2(-18.1001f, -18.5001f), new Vector2(-18.007f, -14.1230f)
                },
                new[]
                {
                    new Vector2(20.0012f, -4.9001f), new Vector2(26.034f, -5.000009f),
                    new Vector2(23.1001f, -6.5001f), new Vector2(20.1001f, -7.5001f)
                }
            };
            // Intersect polygon coordinates
            Vector2[][] intrPol =
            {
                new[]
                {
                    new Vector2(1.03123f, 5.0321f), new Vector2(3.0701f, 7.99501f),
                    new Vector2(7.06001f, 8.25001f), new Vector2(8.95001f, 5.02701f),
                    new Vector2(7.031f, 2.1191f), new Vector2(2.93001f, 2.12901f)
                },
                new[]
                {
                    new Vector2(-4.0909f, 5.07192f), new Vector2(-8.0412f, 5.0202f),
                    new Vector2(-5.94001f, 8.0201f)
                },
                new[]
                {
                    new Vector2(-7.013f, -1.080001f), new Vector2(-4.1301f, -7.91001f),
                    new Vector2(-7.1001f, -13.95001f), new Vector2(-10.007f, -7.91230f)
                },
                new[]
                {
                    new Vector2(1.8812f, -7.8601f), new Vector2(9.951001f, -7.8001f),
                    new Vector2(10.1001f, -10.5001f), new Vector2(8.1601f, -11.85001f),
                    new Vector2(6.034f, -12.00009f)
                }
            };
            // Center coordiantes for free/intr polygons
            Vector2[][] polTrans =
            {
                new[] { new Vector2(140.234f, 2345.76f), new Vector2(0.0345f,   0.1065f) },
                new[] { new Vector2(-220.0f,    330.0f), new Vector2(0.0044f,  0.00765f) },
                new[] { new Vector2(-2222.0f, -1222.0f), new Vector2(0.10001f,  0.9089f) },
                new[] { new Vector2(544.0f,    -998.0f), new Vector2(0.5544f,     0.77f) }
            };
            // Turns for free/intr polygons
            float[] freeTurn = { 37.304f, 124.303f, 322.022f, 266.6666f };
            float[] intrTurn = { 6.6001f, 6.6f, 32.546f, 4.012f };

            //Create circles and check collisions
            for (var obj = 0; obj < circles.Length; obj++)
            {
                //Work vals
                CollisionResult result;

                // Circle objects: circles[obj][0] - coords, circles[obj][1][0] - radius, circles[obj][1][1] - turn
                CircleShape         circleShape     = new CircleShape(Vector2.Zero, circles[obj][1].X);
                Collision.Transform circleTransform =
                    new Collision.Transform(circles[obj][0], circles[obj][1].Y * Mathf.Deg2Rad);

                //Create free polygons objects: freePol[obj] - coord, freeTurn[obj] - turn, polTrans[obj][0] - centr
                PolygonShape        freePolShape     = new PolygonShape(freePol[obj]);
                Collision.Transform freePolTransform =
                    new Collision.Transform(polTrans[obj][0], freeTurn[obj] * Mathf.Deg2Rad);

                //Create free polygons objects: intrPol[obj] - coor, freeTurn[obj] - turn, polTrans[obj][1] - centr
                PolygonShape        intrPolShape     = new PolygonShape(intrPol[obj]);
                Collision.Transform intrPolTransform =
                    new Collision.Transform(polTrans[obj][1], intrTurn[obj] * Mathf.Deg2Rad);

                // Make free test
                var freeResult =
                    circleShape.IntersectsWith(circleTransform, freePolShape, freePolTransform, out result);
                // Make Intersection test
                var intrResult =
                    circleShape.IntersectsWith(circleTransform, intrPolShape, intrPolTransform, out result);
                // Generate error messages
                string freeErr = String.Format("Not interssept for Circle to Polygon test({0}) failed", obj);
                string intrErr = String.Format("Interssept for Circle to Polygon test({0}) failed", obj);
                // Assert results
                Assert.That(freeResult == false, freeErr);
                Assert.That(intrResult, intrErr);
            }
        }
Ejemplo n.º 9
0
        public void TestCircleRectangleCollision()
        {
            // Circles params: center coordiantes x,y ; radius, turn
            Vector2[][] circles =
            {
                new[] { new Vector2(5.0f,   5.0f), new Vector2(2.0f,   34.098f) },
                new[] { new Vector2(-6.0f,  6.0f), new Vector2(3.0f,  324.081f) },
                new[] { new Vector2(-8.0f, -7.0f), new Vector2(4.0f,  7.00098f) },
                new[] { new Vector2(10.0f, -8.0f), new Vector2(5.0f, 104.3398f) }
            };
            //Not intersect rectangle coordinates
            Vector2[][] freeRec =
            {
                new[] { new Vector2(2.023f,   3.00009f), new Vector2(130.0099f, 9900.019f) },
                new[] { new Vector2(102.999f, 60.0017f), new Vector2(-210.012f, 109.0002f) },
                new[] { new Vector2(534.001f, 12.0001f), new Vector2(-1024.99f, -634.091f) },
                new[] { new Vector2(2.09343f, 2.02321f), new Vector2(99.99f,       100.1f) }
            };
            // Intersect rectangle coordinates
            Vector2[][] intrRec =
            {
                new[] { new Vector2(6.0123f,   6.0321f), new Vector2(5.0001f,    5.0001f) },
                new[] { new Vector2(2.0009f,  2.00192f), new Vector2(-6.012f,    6.2202f) },
                new[] { new Vector2(7.013f,  1.980001f), new Vector2(-6.007f,   -7.1230f) },
                new[] { new Vector2(4.0012f,   4.1001f), new Vector2(6.034f,  -8.000009f) }
            };
            // Turns for first/second rect's
            Vector2[] turnRec =
            {
                new Vector2(27.304f,   0.0001f),
                new Vector2(124.303f,    66.6f),
                new Vector2(322.022f, 132.546f),
                new Vector2(66.6666f, 12.012f)
            };
            //Create circles and check collisions
            for (var obj = 0; obj < circles.Length; obj++)
            {
                //Work vals
                CollisionResult result;

                // Circle objects: circles[obj][0] - coords, circles[obj][1][0] - radius, circles[obj][1][1] - turn
                CircleShape         circleShape     = new CircleShape(Vector2.Zero, circles[obj][1].X);
                Collision.Transform circleTransform =
                    new Collision.Transform(circles[obj][0], circles[obj][1].Y * Mathf.Deg2Rad);

                //Create free rectangle objects: freeRec[obj][0] - width/heigth, freeRec[obj][1] - coordinates
                //Create intersect rectangle objects: intrRec[obj][0] - width/heigth, intrRec[obj][1] - coordinates
                // Turns for Shapes turnRec[obj][0-1]

                // Free Rect
                RectangleShape freeRectShape =
                    new RectangleShape(Vector2.Zero, freeRec[obj][0].X, freeRec[obj][0].Y);
                Collision.Transform freeRectTransform =
                    new Collision.Transform(freeRec[obj][1], turnRec[obj].X * Mathf.Deg2Rad);

                //Intersection Rect
                RectangleShape intrRectShape =
                    new RectangleShape(Vector2.Zero, intrRec[obj][0].X, intrRec[obj][0].Y);
                Collision.Transform intrdRectTransform =
                    new Collision.Transform(intrRec[obj][1], turnRec[obj].Y * Mathf.Deg2Rad);

                // Make free test
                var freeResult = circleShape.IntersectsWith(circleTransform, freeRectShape,
                                                            freeRectTransform, out result);
                // Make Intersection test
                var intrResult = circleShape.IntersectsWith(circleTransform, intrRectShape,
                                                            intrdRectTransform, out result);
                // Generate error messages

                string freeErr =
                    String.Format(
                        "Circle to Rectangle test failed; Circle({0})R:({1}) {2}° and freeRect({3} : {4}){5}°",
                        circles[obj][0], circles[obj][1].X, circles[obj][1].Y, freeRec[obj][0], freeRec[obj][1],
                        turnRec[obj].X);


                string intrErr = String.Format(
                    "Circle to Rectangle Interssept failed; Circle({0})R:({1}) {2}° and intrRect({3} : {4}){5}°",
                    circles[obj][0], circles[obj][1].X, circles[obj][1].Y, intrRec[obj][0], intrRec[obj][1],
                    turnRec[obj].Y);
                // Assert results
                Assert.That(freeResult == false, freeErr);
                Assert.That(intrResult, intrErr);
            }
        }