package org.osm2world.core.math; import static java.lang.Math.PI; import static org.osm2world.core.math.VectorXZ.*; import static org.osm2world.core.test.TestUtil.assertAlmostEquals; import org.junit.Test; public class VectorXZTest { @Test public void testRightNormal() { VectorXZ xUnitRightNormal = VectorXZ.X_UNIT.rightNormal(); assertAlmostEquals(0, -1, xUnitRightNormal); VectorXZ testA = new VectorXZ(0.5f, 0.5f); VectorXZ testARightNormal = testA.rightNormal(); assertAlmostEquals(0.707f, -0.707f, testARightNormal); } @Test public void testAngle() { assertAlmostEquals( 0, new VectorXZ( 0, +1).angle()); assertAlmostEquals(0.5*PI, new VectorXZ(+1, 0).angle()); assertAlmostEquals( PI, new VectorXZ( 0, -1).angle()); assertAlmostEquals(1.5*PI, new VectorXZ(-1, 0).angle()); assertAlmostEquals(0.25*PI, new VectorXZ(1, 1).angle()); assertAlmostEquals(0.25*PI, new VectorXZ(5, 5).angle()); } @Test public void testFromAngle() { assertAlmostEquals( 0, +1, fromAngle(0)); assertAlmostEquals(+1, 0, fromAngle(0.5*PI)); assertAlmostEquals( 0, -1, fromAngle(PI)); assertAlmostEquals(-1, 0, fromAngle(1.5*PI)); } @Test public void testAngleBetween() { assertAlmostEquals( 0, angleBetween(X_UNIT, X_UNIT)); assertAlmostEquals( 0, angleBetween(Z_UNIT, Z_UNIT)); assertAlmostEquals( PI, angleBetween(X_UNIT, X_UNIT.invert())); assertAlmostEquals( PI, angleBetween(Z_UNIT, Z_UNIT.invert())); assertAlmostEquals(0.5 * PI, angleBetween(X_UNIT, Z_UNIT)); assertAlmostEquals(0.5 * PI, angleBetween(Z_UNIT, X_UNIT)); assertAlmostEquals(0.5 * PI, angleBetween(Z_UNIT, X_UNIT.mult(3))); assertAlmostEquals(0.25 * PI, angleBetween( X_UNIT, new VectorXZ(1, 1))); assertAlmostEquals(0.75 * PI, angleBetween( X_UNIT, new VectorXZ(-1, -1))); } }