/* * Copyright (c) 2016 Vivid Solutions. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.locationtech.jts.algorithm; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.GeometryFactory; import org.locationtech.jts.geom.LineString; import org.locationtech.jts.geom.Point; import junit.framework.TestCase; /** * Basic functionality tests for RobustLineIntersector. * * @version 1.7 */ public class RobustLineIntersectorTest extends TestCase { RobustLineIntersector i = new RobustLineIntersector(); public RobustLineIntersectorTest(String Name_) { super(Name_); }//public RobustLineIntersectorTest(String Name_) public static void main(String[] args) { String[] testCaseName = {RobustLineIntersectorTest.class.getName()}; junit.textui.TestRunner.main(testCaseName); }//public static void main(String[] args) public void test2Lines() { RobustLineIntersector i = new RobustLineIntersector(); Coordinate p1 = new Coordinate(10, 10); Coordinate p2 = new Coordinate(20, 20); Coordinate q1 = new Coordinate(20, 10); Coordinate q2 = new Coordinate(10, 20); Coordinate x = new Coordinate(15, 15); i.computeIntersection(p1, p2, q1, q2); assertEquals(RobustLineIntersector.POINT_INTERSECTION, i.getIntersectionNum()); assertEquals(1, i.getIntersectionNum()); assertEquals(x, i.getIntersection(0)); assertTrue(i.isProper()); assertTrue(i.hasIntersection()); } public void testCollinear1() { RobustLineIntersector i = new RobustLineIntersector(); Coordinate p1 = new Coordinate(10, 10); Coordinate p2 = new Coordinate(20, 10); Coordinate q1 = new Coordinate(22, 10); Coordinate q2 = new Coordinate(30, 10); i.computeIntersection(p1, p2, q1, q2); assertEquals(RobustLineIntersector.NO_INTERSECTION, i.getIntersectionNum()); assertTrue(!i.isProper()); assertTrue(!i.hasIntersection()); } public void testCollinear2() { RobustLineIntersector i = new RobustLineIntersector(); Coordinate p1 = new Coordinate(10, 10); Coordinate p2 = new Coordinate(20, 10); Coordinate q1 = new Coordinate(20, 10); Coordinate q2 = new Coordinate(30, 10); i.computeIntersection(p1, p2, q1, q2); assertEquals(RobustLineIntersector.POINT_INTERSECTION, i.getIntersectionNum()); assertTrue(!i.isProper()); assertTrue(i.hasIntersection()); } public void testCollinear3() { RobustLineIntersector i = new RobustLineIntersector(); Coordinate p1 = new Coordinate(10, 10); Coordinate p2 = new Coordinate(20, 10); Coordinate q1 = new Coordinate(15, 10); Coordinate q2 = new Coordinate(30, 10); i.computeIntersection(p1, p2, q1, q2); assertEquals(RobustLineIntersector.COLLINEAR_INTERSECTION, i.getIntersectionNum()); assertTrue(!i.isProper()); assertTrue(i.hasIntersection()); } public void testCollinear4() { RobustLineIntersector i = new RobustLineIntersector(); Coordinate p1 = new Coordinate(30, 10); Coordinate p2 = new Coordinate(20, 10); Coordinate q1 = new Coordinate(10, 10); Coordinate q2 = new Coordinate(30, 10); i.computeIntersection(p1, p2, q1, q2); assertEquals(RobustLineIntersector.COLLINEAR_INTERSECTION, i.getIntersectionNum()); assertTrue(i.hasIntersection()); } public void testEndpointIntersection() { i.computeIntersection(new Coordinate(100, 100), new Coordinate(10, 100), new Coordinate(100, 10), new Coordinate(100, 100)); assertTrue(i.hasIntersection()); assertEquals(1, i.getIntersectionNum()); } public void testEndpointIntersection2() { i.computeIntersection(new Coordinate(190, 50), new Coordinate(120, 100), new Coordinate(120, 100), new Coordinate(50, 150)); assertTrue(i.hasIntersection()); assertEquals(1, i.getIntersectionNum()); assertEquals(new Coordinate(120, 100), i.getIntersection(1)); } public void testOverlap() { i.computeIntersection(new Coordinate(180, 200), new Coordinate(160, 180), new Coordinate(220, 240), new Coordinate(140, 160)); assertTrue(i.hasIntersection()); assertEquals(2, i.getIntersectionNum()); } public void testIsProper1() { i.computeIntersection(new Coordinate(30, 10), new Coordinate(30, 30), new Coordinate(10, 10), new Coordinate(90, 11)); assertTrue(i.hasIntersection()); assertEquals(1, i.getIntersectionNum()); assertTrue(i.isProper()); } public void testIsProper2() { i.computeIntersection(new Coordinate(10, 30), new Coordinate(10, 0), new Coordinate(11, 90), new Coordinate(10, 10)); assertTrue(i.hasIntersection()); assertEquals(1, i.getIntersectionNum()); assertTrue(! i.isProper()); } public void testIsCCW() { assertEquals(1, CGAlgorithms.computeOrientation( new Coordinate(-123456789, -40), new Coordinate(0, 0), new Coordinate(381039468754763d, 123456789))); } public void testIsCCW2() { assertEquals(0, CGAlgorithms.computeOrientation( new Coordinate(10, 10), new Coordinate(20, 20), new Coordinate(0, 0))); assertEquals(0, NonRobustCGAlgorithms.computeOrientation( new Coordinate(10, 10), new Coordinate(20, 20), new Coordinate(0, 0))); } public void testA() { Coordinate p1 = new Coordinate(-123456789, -40); Coordinate p2 = new Coordinate(381039468754763d, 123456789); Coordinate q = new Coordinate(0, 0); LineString l = new GeometryFactory().createLineString(new Coordinate[] {p1, p2}); Point p = new GeometryFactory().createPoint(q); assertEquals(false, l.intersects(p)); assertEquals(false, CGAlgorithms.isOnLine(q, new Coordinate[] {p1, p2})); assertEquals(-1, CGAlgorithms.computeOrientation(p1, p2, q)); } }