// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.elevation.tests; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.awt.Color; import java.util.List; import org.junit.Rule; import org.junit.Test; import org.openstreetmap.josm.data.coor.LatLon; import org.openstreetmap.josm.plugins.elevation.ColorMap; import org.openstreetmap.josm.plugins.elevation.grid.EleCoordinate; import org.openstreetmap.josm.plugins.elevation.grid.EleVertex; import org.openstreetmap.josm.testutils.JOSMTestRules; public class EleVertexTest { private static final double EPS = 1e-10; @Rule public JOSMTestRules rules = new JOSMTestRules().preferences(); @Test public void testDivide() { EleCoordinate p1 = new EleCoordinate(30.0, 30.0, 100.0); EleCoordinate p2 = new EleCoordinate(35.0, 30.0, 120.0); EleCoordinate p3 = new EleCoordinate(35.0, 40.0, 110.0); EleVertex ev = new EleVertex(p1, p2, p3); List<EleVertex> list = ev.divide(); assertEquals(2, list.size()); // 1st vertex (p1, p2, pN 105m) EleVertex v1 = list.get(0); assertEquals(325 / 3D, v1.getEle(), EPS); assertCoorEq(v1, 30D, 30D, 0); assertCoorEq(v1, 30D, 35D, 1); assertCoorEq(v1, 35D, 32.5D, 2); // 2nd vertex (p3, p2, pN = 105m) EleVertex v2 = list.get(1); assertEquals(335/3D, v2.getEle(), EPS); assertCoorEq(v2, 40D, 35D, 0); assertCoorEq(v2, 30D, 35D, 1); assertCoorEq(v2, 35D, 32.5D, 2); } @Test public void testSimpleRecurse() { EleCoordinate c1 = new EleCoordinate(new LatLon(50.8328, 8.1337), 300); EleCoordinate c2 = new EleCoordinate(new LatLon(50.8328, 7.9217), 200); EleCoordinate c3 = new EleCoordinate(new LatLon(50.9558, 7.9217), 400); /*EleCoordinate c4 =*/ new EleCoordinate(new LatLon(50.5767627, 9.1938483), 100); EleVertex v1 = new EleVertex(c1, c2, c3); System.out.println("Start recurse"); recurse(v1, 0); } private void recurse(EleVertex v, int depth) { if (!v.isFinished() && depth < 100) { System.out.println("\tDivide: " + v); List<EleVertex> list = v.divide(); assertNotNull(list); assertEquals(2, list.size()); assertTrue(depth < 50); //, "Too many recursions?"); for (EleVertex eleVertex : list) { //System.out.println("\t\tRecurse: " + eleVertex); assertTrue("Area is larger " + v.getArea() + " > " + eleVertex.getArea(), eleVertex.getArea() < v.getArea()); recurse(eleVertex, depth + 1); } } else { System.out.println("Finished: " + depth); } } /* public void testRenderer() { // Staufenberg, Hessen // Ulrichstein, Hessen GridRenderer er = new GridRenderer("Ele", new Bounds( new LatLon(50.6607106, 8.7337029), new LatLon(50.5767627, 9.1938483)), null); er.run(); }*/ @Test public void testColorMap() { ColorMap testMap = ColorMap.create("Test", new Color[]{Color.white, Color.black}, new int[]{0, 1000}); // range test Color c1 = testMap.getColor(-100); assertEquals(Color.white, c1); // range test Color c2 = testMap.getColor(1100); assertEquals(Color.black, c2); // test mid (RGB 128, 128, 128) Color c3 = testMap.getColor(500); assertEquals(Color.gray, c3); // test 0.75 (RGB 64 x 3) Color c4 = testMap.getColor(749); assertEquals(Color.darkGray, c4); // test 0.25 (RGB 192 x 3) Color c5 = testMap.getColor(249); assertEquals(Color.lightGray, c5); } private void assertCoorEq(EleVertex v1, double x, double y, int n) { assertEquals(x, v1.get(n).getX(), EPS); assertEquals(y, v1.get(n).getY(), EPS); } }