package org.osm2world.core.math;
import static java.lang.Math.sqrt;
import static java.util.Arrays.asList;
import static org.junit.Assert.*;
import static org.osm2world.core.math.VectorXZ.NULL_VECTOR;
import static org.osm2world.core.test.TestUtil.assertAlmostEquals;
import org.junit.Test;
public class SimplePolygonXZTest {
private SimplePolygonXZ p1 = new SimplePolygonXZ(asList(
new VectorXZ(-1, -1),
new VectorXZ(-1, 0),
new VectorXZ(-1, +1),
new VectorXZ(+1, +1),
new VectorXZ(+1, -1),
new VectorXZ(-1, -1)));
private SimplePolygonXZ p2 = new SimplePolygonXZ(asList(
new VectorXZ(-0.5, -0.5),
new VectorXZ(-0.5, +1.5),
new VectorXZ(+1.5, +1.5),
new VectorXZ(+1.5, -0.5),
new VectorXZ(-0.5, -0.5)));
@Test
public void testGetCentroid() {
assertAlmostEquals(NULL_VECTOR, p1.getCentroid());
assertAlmostEquals(NULL_VECTOR, p1.reverse().getCentroid());
assertAlmostEquals(new VectorXZ(0.5, 0.5), p2.getCentroid());
assertAlmostEquals(new VectorXZ(0.5, 0.5), p2.reverse().getCentroid());
}
@Test
public void testGetArea() {
assertAlmostEquals(4, p1.getArea());
assertAlmostEquals(4, p1.reverse().getArea());
assertAlmostEquals(4, p2.getArea());
assertAlmostEquals(4, p2.reverse().getArea());
}
@Test
public void testGetDiameter() {
assertAlmostEquals(sqrt(8), p1.getDiameter());
assertAlmostEquals(sqrt(8), p2.getDiameter());
}
@Test
public void testGetSimplifiedPolygon() {
assertEquals(p2, p2.getSimplifiedPolygon());
assertEquals(4, p1.getSimplifiedPolygon().size());
assertAlmostEquals(p1.getArea(), p1.getSimplifiedPolygon().getArea());
}
@Test
public void testDistanceToSegments() {
assertAlmostEquals(1, p1.distanceToSegments(NULL_VECTOR));
assertAlmostEquals(0.5, p2.distanceToSegments(NULL_VECTOR));
}
@Test
public void testShift() {
SimplePolygonXZ shiftP = p1.shift(VectorXZ.X_UNIT);
assertSame(p1.size(), shiftP.size());
assertAlmostEquals(new VectorXZ( 0, -1), shiftP.getVertexLoop().get(0));
assertAlmostEquals(new VectorXZ( 0, 0), shiftP.getVertexLoop().get(1));
assertAlmostEquals(new VectorXZ( 0, +1), shiftP.getVertexLoop().get(2));
assertAlmostEquals(new VectorXZ( 2, +1), shiftP.getVertexLoop().get(3));
assertAlmostEquals(new VectorXZ( 2, -1), shiftP.getVertexLoop().get(4));
assertAlmostEquals(new VectorXZ( 0, -1), shiftP.getVertexLoop().get(5));
}
}