mirror of
https://athene2.informatik.unibw-muenchen.de/progproj/gruppen-ht24/Gruppe-02.git
synced 2024-11-25 18:39:44 +01:00
109 lines
4.1 KiB
Java
109 lines
4.1 KiB
Java
////////////////////////////////////////
|
|
// Programming project code
|
|
// UniBw M, 2022, 2023, 2024
|
|
// www.unibw.de/inf2
|
|
// (c) Mark Minas (mark.minas@unibw.de)
|
|
////////////////////////////////////////
|
|
|
|
package pp.util;
|
|
|
|
import org.junit.Test;
|
|
|
|
import static java.lang.Math.min;
|
|
import static org.junit.Assert.assertEquals;
|
|
import static pp.util.FloatMath.DEG_TO_RAD;
|
|
import static pp.util.FloatMath.ZERO_TOLERANCE;
|
|
import static pp.util.FloatMath.cos;
|
|
import static pp.util.FloatMath.sin;
|
|
|
|
public class AngleTest {
|
|
@Test
|
|
public void compareAngles() {
|
|
for (int i = 0; i < 360; i++) {
|
|
final Angle u = Angle.fromDegrees(i);
|
|
for (int j = 0; j < 360; j++) {
|
|
final Angle v = Angle.fromDegrees(j);
|
|
assertEquals("compare " + i + "° and " + j + "°", Integer.compare(i, j), (Object) u.compareTo(v));
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void addAngles() {
|
|
for (int i = 0; i < 360; i++) {
|
|
final Angle u = Angle.fromDegrees(i);
|
|
for (int j = 0; j < 360; j++) {
|
|
final Angle v = Angle.fromDegrees(j);
|
|
final Angle sum = u.plus(v);
|
|
assertEquals(i + "° + " + j + "°, x coordinate", cos((i + j) * DEG_TO_RAD), sum.x, ZERO_TOLERANCE);
|
|
assertEquals(i + "° + " + j + "°, y coordinate", sin((i + j) * DEG_TO_RAD), sum.y, ZERO_TOLERANCE);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void subtractAngles() {
|
|
for (int i = 0; i < 360; i++) {
|
|
final Angle u = Angle.fromDegrees(i);
|
|
for (int j = 0; j < 360; j++) {
|
|
final Angle v = Angle.fromDegrees(j);
|
|
final Angle diff = u.minus(v);
|
|
assertEquals(i + "° - " + j + "°, x coordinate", cos((i - j) * DEG_TO_RAD), diff.x, ZERO_TOLERANCE);
|
|
assertEquals(i + "° - " + j + "°, y coordinate", sin((i - j) * DEG_TO_RAD), diff.y, ZERO_TOLERANCE);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void minAngle() {
|
|
for (int i = 0; i < 360; i++) {
|
|
final Angle u = Angle.fromDegrees(i);
|
|
for (int j = 0; j < 360; j++) {
|
|
final Angle v = Angle.fromDegrees(j);
|
|
final Angle diff = Angle.min(u, v);
|
|
assertEquals(i + "° - " + j + "°, x coordinate", cos(min(i, j) * DEG_TO_RAD), diff.x, ZERO_TOLERANCE);
|
|
assertEquals(i + "° - " + j + "°, y coordinate", sin(min(i, j) * DEG_TO_RAD), diff.y, ZERO_TOLERANCE);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void bisector() {
|
|
for (int right = 0; right < 360; right++) {
|
|
final Angle rightAngle = Angle.fromDegrees(right);
|
|
for (int add = 0; add < 360; add++) {
|
|
final int left = right + add;
|
|
final Angle bisector = Angle.fromDegrees(left).bisector(rightAngle);
|
|
final float exp = (right + 0.5f * add) * DEG_TO_RAD;
|
|
assertEquals("left=" + left + "° / right=" + right + "°, x coordinate", cos(exp), bisector.x, ZERO_TOLERANCE);
|
|
assertEquals("left=" + left + "° / right=" + right + "°, y coordinate", sin(exp), bisector.y, ZERO_TOLERANCE);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void leftOf() {
|
|
for (int right = 0; right < 360; right++) {
|
|
final Angle rightAngle = Angle.fromDegrees(right);
|
|
for (int add = 1; add < 360; add++)
|
|
if (add != 180) {
|
|
final int left = right + add;
|
|
final Angle leftAngle = Angle.fromDegrees(left);
|
|
assertEquals(left + "° left of " + right + "°", add < 180, leftAngle.leftOf(rightAngle));
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void rightOf() {
|
|
for (int right = 0; right < 360; right++) {
|
|
final Angle rightAngle = Angle.fromDegrees(right);
|
|
for (int add = 1; add < 360; add++)
|
|
if (add != 180) {
|
|
final int left = right + add;
|
|
final Angle leftAngle = Angle.fromDegrees(left);
|
|
assertEquals(left + "° right of " + right + "°", add > 180, leftAngle.rightOf(rightAngle));
|
|
}
|
|
}
|
|
}
|
|
} |