package org.osm2world.core.math; import static org.junit.Assert.*; import static org.osm2world.core.math.GeometryUtil.*; import static org.osm2world.core.math.VectorXZ.*; import static org.osm2world.core.test.TestUtil.*; import java.util.List; import org.junit.Test; public class GeometryUtilTest { @Test public void testIsRightOf() { assertTrue(isRightOf(X_UNIT, NULL_VECTOR, Z_UNIT)); assertFalse(isRightOf(X_UNIT, Z_UNIT, NULL_VECTOR)); assertTrue(isRightOf(NULL_VECTOR, Z_UNIT, X_UNIT)); assertFalse(isRightOf(NULL_VECTOR, X_UNIT, Z_UNIT)); for (VectorXZ v1 : anyVectorXZ()) { for (VectorXZ v2 : anyVectorXZ()) { if (!v1.equals(v2) && !v2.equals(NULL_VECTOR)) { VectorXZ l1 = v1; VectorXZ l2 = v1.add(v2); VectorXZ pR = v1.add(v2.rightNormal()); VectorXZ pL = v1.subtract(v2.rightNormal()); assertTrue(pR + " should be right of " + l1 + "-" + "l2", isRightOf(pR, l1, l2)); assertFalse(pL + " should not be right of " + l1 + "-" + "l2", isRightOf(pL, l1, l2)); } } } } @Test public void testIsBetween() { assertTrue(isBetween(NULL_VECTOR, X_UNIT, X_UNIT.invert())); assertTrue(isBetween(NULL_VECTOR, X_UNIT.invert(), X_UNIT)); assertTrue(isBetween(Z_UNIT, X_UNIT.invert(), X_UNIT)); } @Test public void testInterpolateElevation() { assertEquals(9.0, GeometryUtil.interpolateElevation( new VectorXZ(5, 1), new VectorXYZ(3, 7, 1), new VectorXYZ(6, 10, 1)).y, 1e-5); } @Test public void testEquallyDistributePointsAlong1StartEnd() { List<VectorXZ> result = GeometryUtil.equallyDistributePointsAlong( 1f, true, new VectorXZ(-2, 5), new VectorXZ(+4, 5)); assertSame(7, result.size()); assertAlmostEquals(-2, 5, result.get(0)); assertAlmostEquals(-1, 5, result.get(1)); assertAlmostEquals( 0, 5, result.get(2)); assertAlmostEquals(+1, 5, result.get(3)); assertAlmostEquals(+2, 5, result.get(4)); assertAlmostEquals(+3, 5, result.get(5)); assertAlmostEquals(+4, 5, result.get(6)); } @Test public void testEquallyDistributePointsAlong1NoStartEnd() { List<VectorXZ> result = GeometryUtil.equallyDistributePointsAlong( 1f, false, new VectorXZ(-2, 5), new VectorXZ(+4, 5)); assertSame(6, result.size()); assertAlmostEquals(-1.5f, 5, result.get(0)); assertAlmostEquals(-0.5f, 5, result.get(1)); assertAlmostEquals(+0.5f, 5, result.get(2)); assertAlmostEquals(+1.5f, 5, result.get(3)); assertAlmostEquals(+2.5f, 5, result.get(4)); assertAlmostEquals(+3.5f, 5, result.get(5)); } }