public void LineAlgorithmsIsParallelTest() { // parallel lines Coordinate firstLineStart = new Coordinate(1, 1); Coordinate firstLineEnd = new Coordinate(4, 1); Coordinate secondLineStart = new Coordinate(2, 2); Coordinate secondLineEnd = new Coordinate(4, 2); Assert.IsTrue(LineAlgorithms.IsParallel(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd)); Assert.IsFalse(LineAlgorithms.Intersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd)); firstLineStart = new Coordinate(1.2, 1.2); firstLineEnd = new Coordinate(1.2, 7.2); secondLineStart = new Coordinate(2.2, 8.2); secondLineEnd = new Coordinate(2.2, 15.2); Assert.IsTrue(LineAlgorithms.IsParallel(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd)); Assert.IsFalse(LineAlgorithms.Intersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd)); firstLineStart = new Coordinate(1, 1); firstLineEnd = new Coordinate(1, 7); secondLineStart = new Coordinate(1, 1); secondLineEnd = new Coordinate(1, 7); Assert.IsTrue(LineAlgorithms.IsParallel(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd)); Assert.IsTrue(LineAlgorithms.Intersects(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd)); // non parallel lines firstLineStart = new Coordinate(1, 1); firstLineEnd = new Coordinate(1, 7); secondLineStart = new Coordinate(2, 1); secondLineEnd = new Coordinate(2.2, 8); Assert.IsFalse(LineAlgorithms.IsParallel(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd)); firstLineStart = new Coordinate(1, 1); firstLineEnd = new Coordinate(1, 7); secondLineStart = new Coordinate(0, 2); secondLineEnd = new Coordinate(10, 2); Assert.IsFalse(LineAlgorithms.IsParallel(firstLineStart, firstLineEnd, secondLineStart, secondLineEnd)); // parallel infinite lines firstLineStart = new Coordinate(1, 1); CoordinateVector firstVector = new CoordinateVector(0, 1); secondLineStart = new Coordinate(2, 2); CoordinateVector secondVector = new CoordinateVector(0, 1); Assert.IsTrue(LineAlgorithms.IsParallel(firstLineStart, firstVector, secondLineStart, secondVector)); firstLineStart = new Coordinate(2, 5); firstVector = new CoordinateVector(0, 1); secondLineStart = new Coordinate(2, 4); secondVector = new CoordinateVector(0, 4); Assert.IsTrue(LineAlgorithms.Coincides(firstLineStart, firstVector, secondLineStart, secondVector)); Assert.IsTrue(LineAlgorithms.IsParallel(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.IsParallel(firstLineStart, firstVector, secondLineStart, secondVector)); // non parallel infinite lines 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)); Assert.IsFalse(LineAlgorithms.IsParallel(firstLineStart, firstVector, secondLineStart, secondVector)); firstLineStart = new Coordinate(2, 5); firstVector = new CoordinateVector(0, 1); secondLineStart = new Coordinate(2, 4); secondVector = new CoordinateVector(4, 0); Assert.IsTrue(LineAlgorithms.Intersects(firstLineStart, firstVector, secondLineStart, secondVector)); Assert.IsFalse(LineAlgorithms.IsParallel(firstLineStart, firstVector, secondLineStart, secondVector)); }
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)); }