public void PolyPolyIntersect_SimpleBoolean_Negative()
        {
            var p0 = new Polygon(new Vector2[] {
                new Vector2(-50.0f, 50.0f),
                new Vector2(50.0f, 50.0f),
                new Vector2(50.0f, -50.0f),
                new Vector2(-50.0f, -50.0f)
            });

            var p1 = new Polygon(new Vector2[] {
                new Vector2(0.0f, 60.0f),
                new Vector2(-50.0f, 120.0f),
                new Vector2(50.0f, 120.0f)
            });

            var result = PolygonIntersection.PolygonPolygonIntersect(p0, p1);

            Assert.False(result);
        }
        public void PolyPolyIntersect_SimpleBoolean_Positive()
        {
            var p0 = new Polygon(new Vector2[] {
                new Vector2(-50.0f, 50.0f),
                new Vector2(50.0f, 50.0f),
                new Vector2(50.0f, -50.0f),
                new Vector2(-50.0f, -50.0f)
            });

            var p1 = new Polygon(new Vector2[] {
                new Vector2(0.0f, 40.0f),
                new Vector2(-50.0f, 100.0f),
                new Vector2(50.0f, 100.0f)
            });

            var result = PolygonIntersection.PolygonPolygonIntersect(p0, p1);

            Assert.True(result);
        }
        public void PolyPolyIntersect_FullOverload_NegativeOnEdge()
        {
            var p0 = new Polygon(new Vector2[] {
                new Vector2(-50.0f, 50.0f),
                new Vector2(50.0f, 50.0f),
                new Vector2(50.0f, -50.0f),
                new Vector2(-50.0f, -50.0f)
            });

            var p1 = new Polygon(new Vector2[] {
                new Vector2(0.0f, 50.0f),
                new Vector2(-50.0f, 100.0f),
                new Vector2(50.0f, 100.0f)
            });

            var result = PolygonIntersection.PolygonPolygonIntersect(p0, p1, false);

            Assert.False(result.Intersecting);
            Assert.Equal(0.0f, result.Depth, 4);
            Assert.Equal(0.0f, result.Normal0To1.X, 4);
            Assert.Equal(0.0f, result.Normal0To1.Y, 4);
            Assert.Equal(0.0f, result.Point.X, 4);
            Assert.Equal(0.0f, result.Point.Y, 4);
        }
        public void PolyPolyIntersect_FullOverload_PositiveOnEdge()
        {
            var p0 = new Polygon(new Vector2[] {
                new Vector2(-50.0f, 50.0f),
                new Vector2(50.0f, 50.0f),
                new Vector2(50.0f, -50.0f),
                new Vector2(-50.0f, -50.0f)
            });

            var p1 = new Polygon(new Vector2[] {
                new Vector2(0.0f, 49.9999f),//Due to the epsilon impact on fireonedge..
                new Vector2(-50.0f, 100.0f),
                new Vector2(50.0f, 100.0f)
            });

            var result = PolygonIntersection.PolygonPolygonIntersect(p0, p1, true);

            Assert.True(result.Intersecting);
            Assert.Equal(0.0f, result.Depth, 3);
            Assert.Equal(0.0f, result.Normal0To1.X, 3);
            Assert.Equal(1.0f, result.Normal0To1.Y, 3);
            Assert.Equal(0.0f, result.Point.X, 3);
            Assert.Equal(0.0f, result.Point.Y, 3);
        }
        public void PolyPolyIntersect_FullOverload_Positive()
        {
            var p0 = new Polygon(new Vector2[] {
                new Vector2(-50.0f, 50.0f),
                new Vector2(50.0f, 50.0f),
                new Vector2(50.0f, -50.0f),
                new Vector2(-50.0f, -50.0f)
            });

            var p1 = new Polygon(new Vector2[] {
                new Vector2(0.0f, 40.0f),
                new Vector2(-50.0f, 100.0f),
                new Vector2(50.0f, 100.0f)
            });

            var result = PolygonIntersection.PolygonPolygonIntersect(p0, p1, true);

            Assert.True(result.Intersecting);
            Assert.Equal(10.0f, result.Depth, 4);
            Assert.Equal(0.0f, result.Normal0To1.X, 4);
            Assert.Equal(1.0f, result.Normal0To1.Y, 4);
            Assert.Equal(0.0f, result.Point.X, 4);
            Assert.Equal(0.0f, result.Point.Y, 4);
        }