Beispiel #1
0
        public void LineAlgorithmsIntersectsTest()
        {
            // coinciding lines
            Coordinate firstLineStart  = new Coordinate(1, 1);
            Coordinate firstLineEnd    = new Coordinate(4, 1);
            Coordinate secondLineStart = new Coordinate(1, 1);
            Coordinate secondLineEnd   = new Coordinate(4, 1);

            Assert.IsTrue(LineAlgorithms.Intersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd));


            // parallel lines
            firstLineStart  = new Coordinate(1.3, 1.3);
            firstLineEnd    = new Coordinate(1.3, 4.3);
            secondLineStart = new Coordinate(2.3, 1.3);
            secondLineEnd   = new Coordinate(2.3, 4.3);
            Assert.IsFalse(LineAlgorithms.Intersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd));


            // intersecting lines
            firstLineStart  = new Coordinate(1, 1);
            firstLineEnd    = new Coordinate(1, 4);
            secondLineStart = new Coordinate(4, 2);
            secondLineEnd   = new Coordinate(0, 2);
            Assert.IsTrue(LineAlgorithms.Intersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd));

            firstLineStart  = new Coordinate(1, 1);
            firstLineEnd    = new Coordinate(4, 4);
            secondLineStart = new Coordinate(1, 4);
            secondLineEnd   = new Coordinate(4, 1);
            Assert.IsTrue(LineAlgorithms.Intersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd));

            firstLineStart  = new Coordinate(2, 2);
            firstLineEnd    = new Coordinate(2, 8);
            secondLineStart = new Coordinate(2, 5);
            secondLineEnd   = new Coordinate(2, 10);
            Assert.IsTrue(LineAlgorithms.Intersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd));

            firstLineStart  = new Coordinate(2, 2);
            firstLineEnd    = new Coordinate(2, 8);
            secondLineStart = new Coordinate(2, 1);
            secondLineEnd   = new Coordinate(2, 8);
            Assert.IsTrue(LineAlgorithms.Intersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd));

            firstLineStart  = new Coordinate(7, 7);
            firstLineEnd    = new Coordinate(7, 7);
            secondLineStart = new Coordinate(7, 7);
            secondLineEnd   = new Coordinate(7, 7);
            Assert.IsTrue(LineAlgorithms.Intersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd));


            // not intersecting lines
            firstLineStart  = new Coordinate(2, 2);
            firstLineEnd    = new Coordinate(2, 8);
            secondLineStart = new Coordinate(2.1, 1);
            secondLineEnd   = new Coordinate(10, 8);
            Assert.IsFalse(LineAlgorithms.Intersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd));

            firstLineStart  = new Coordinate(2, 2);
            firstLineEnd    = new Coordinate(2, 8);
            secondLineStart = new Coordinate(1, 8.001);
            secondLineEnd   = new Coordinate(10, 8.001);
            Assert.IsFalse(LineAlgorithms.Intersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd));


            // internally intersecting lines
            firstLineStart  = new Coordinate(1, 4);
            firstLineEnd    = new Coordinate(4, 1);
            secondLineStart = new Coordinate(3, 2);
            secondLineEnd   = new Coordinate(2, 3);
            Assert.IsTrue(LineAlgorithms.InternalIntersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd));

            firstLineStart  = new Coordinate(1, 4);
            firstLineEnd    = new Coordinate(4, 1);
            secondLineStart = new Coordinate(3, 2);
            secondLineEnd   = new Coordinate(3, 2);
            Assert.IsTrue(LineAlgorithms.InternalIntersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd));

            firstLineStart  = new Coordinate(1, 4);
            firstLineEnd    = new Coordinate(4, 1);
            secondLineStart = new Coordinate(1, 2);
            secondLineEnd   = new Coordinate(200, 3);
            Assert.IsTrue(LineAlgorithms.InternalIntersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd));

            firstLineStart  = new Coordinate(1, 4);
            firstLineEnd    = new Coordinate(4, 1);
            secondLineStart = new Coordinate(1, 2);
            secondLineEnd   = new Coordinate(200, 3);
            Assert.IsTrue(LineAlgorithms.InternalIntersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd));


            // not internally intersecting lines
            firstLineStart  = new Coordinate(0, 0);
            firstLineEnd    = new Coordinate(0, 1000.33);
            secondLineStart = new Coordinate(1000.33, 200);
            secondLineEnd   = new Coordinate(0, 0);
            Assert.IsFalse(LineAlgorithms.InternalIntersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd));

            firstLineStart  = new Coordinate(1, 1);
            firstLineEnd    = new Coordinate(100, 1);
            secondLineStart = new Coordinate(1, 4);
            secondLineEnd   = new Coordinate(1, 1);
            Assert.IsFalse(LineAlgorithms.InternalIntersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd));


            // intersecting infinite lines
            firstLineStart = new Coordinate(2, 5);
            CoordinateVector firstVector = new CoordinateVector(0, 1);

            secondLineStart = new Coordinate(2, 4);
            CoordinateVector secondVector = new CoordinateVector(4, 0);

            Assert.IsTrue(LineAlgorithms.Intersects(firstLineStart, firstVector, secondLineStart, secondVector));

            firstLineStart  = new Coordinate(2, 4);
            firstVector     = new CoordinateVector(-3, 1);
            secondLineStart = new Coordinate(5, 3);
            secondVector    = new CoordinateVector(-3, 1);
            Assert.IsTrue(LineAlgorithms.Intersects(firstLineStart, firstVector, secondLineStart, secondVector));

            firstLineStart  = new Coordinate(1, 1);
            firstVector     = new CoordinateVector(0, 1);
            secondLineStart = new Coordinate(1, 1);
            secondVector    = new CoordinateVector(1, 0);
            Assert.IsTrue(LineAlgorithms.Intersects(firstLineStart, firstVector, secondLineStart, secondVector));

            firstLineStart  = new Coordinate(1, 1);
            firstVector     = new CoordinateVector(0, 1);
            secondLineStart = new Coordinate(2, 2);
            secondVector    = new CoordinateVector(0, 1);
            Assert.IsTrue(LineAlgorithms.IsParallel(firstLineStart, firstVector, secondLineStart, secondVector));
            Assert.IsTrue(LineAlgorithms.Intersects(firstLineStart, firstVector, secondLineStart, secondVector));
        }