/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.referencing.operation.builder; import org.geotools.geometry.DirectPosition2D; import org.opengis.geometry.DirectPosition; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Random; import org.junit.*; import static org.junit.Assert.*; public final class TriangulationFactoryTest { /** * Test (@link TringulationFactory). */ @Test public void testTringulationFactory() { DirectPosition sp1 = new DirectPosition2D(10, 10); DirectPosition tp1 = new DirectPosition2D(10, 10); DirectPosition sp2 = new DirectPosition2D(20, 10); DirectPosition tp2 = new DirectPosition2D(20, 10); DirectPosition sp3 = new DirectPosition2D(20, 20); DirectPosition tp3 = new DirectPosition2D(20, 20); DirectPosition sp4 = new DirectPosition2D(10, 20); DirectPosition tp4 = new DirectPosition2D(10, 20); DirectPosition sp5 = new DirectPosition2D(14, 16); DirectPosition tp5 = new DirectPosition2D(14, 16); ExtendedPosition mtp1 = new ExtendedPosition(sp1, tp1); ExtendedPosition mtp2 = new ExtendedPosition(sp2, tp2); ExtendedPosition mtp3 = new ExtendedPosition(sp3, tp3); ExtendedPosition mtp4 = new ExtendedPosition(sp4, tp4); ExtendedPosition mtp5 = new ExtendedPosition(sp5, tp5); DirectPosition[] vertices = new DirectPosition[1]; vertices[0] = mtp5; Quadrilateral quad = new Quadrilateral(mtp1, mtp2, mtp3, mtp4); try { new TriangulationFactory(quad, vertices); } catch (TriangulationException e) { System.out.println(e.getMessage()); } } /** * Test (@link TriangulationFactory). Triangles are tested with delaunay test. */ @Test public void testDelaunay() throws TriangulationException { // coordinates of quadrilateral for triangulation DirectPosition2D leftDown = new DirectPosition2D(100, 100); DirectPosition2D rightDown = new DirectPosition2D(200, 100); DirectPosition2D rightTop = new DirectPosition2D(200, 250); DirectPosition2D leftTop = new DirectPosition2D(100, 250); // generator for points within the quadrilateral: Random randomCoord = new Random(872066443); // number of points int number = 5; DirectPosition[] vertices = new DirectPosition[number]; for (int i = 0; i < number; i++) { double x = leftDown.x + (randomCoord.nextDouble() * (rightDown.x - leftDown.x)); double y = leftDown.y + (randomCoord.nextDouble() * (leftTop .y - leftDown.y)); vertices[i] = new DirectPosition2D(x, y); } Quadrilateral quad = new Quadrilateral(leftDown, rightDown, rightTop, leftTop); List<TINTriangle> triangles = new ArrayList<TINTriangle>(); TriangulationFactory trigfac = new TriangulationFactory(quad, vertices); triangles = trigfac.getTriangulation(); int j = 1; for (Iterator<TINTriangle> i = triangles.iterator(); i.hasNext();) { TINTriangle triangle = i.next(); for (j = 0; j < vertices.length; j++) { // Delunay Test - there are no vetrices in the CircumCicle assertFalse(triangle.getCircumCicle().contains(vertices[j])); } } } }