Revert "fix is convex negated (#241)" (#458)

This reverts commit f93e5221f8.
convex-tweaks
Erik Price 2023-01-26 01:59:37 -08:00 zatwierdzone przez GitHub
rodzic f772180fb7
commit 4f43f1127a
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
2 zmienionych plików z 22 dodań i 34 usunięć

Wyświetl plik

@ -403,20 +403,11 @@ public class GeoUtils {
return JTS_FACTORY.createPolygon(exteriorRing, rings.toArray(LinearRing[]::new));
}
/**
* Returns {@code false} if the signed area of the triangle formed by 3 sequential points changes sign anywhere along
* {@code ring}, ignoring repeated and collinear points.
*/
public static boolean isConvex(LinearRing ring) {
return !isConcave(ring);
}
/**
* Returns {@code true} if the signed area of the triangle formed by 3 sequential points changes sign anywhere along
* {@code ring}, ignoring repeated and collinear points.
*/
public static boolean isConcave(LinearRing ring) {
public static boolean isConvex(LinearRing ring) {
CoordinateSequence seq = ring.getCoordinateSequence();
if (seq.size() <= 3) {
return false;

Wyświetl plik

@ -117,7 +117,7 @@ class GeoUtilsTest {
@Test
void testIsConvexTriangle() {
assertConcave(true, newLinearRing(
assertConvex(true, newLinearRing(
0, 0,
1, 0,
0, 1,
@ -127,7 +127,7 @@ class GeoUtilsTest {
@Test
void testIsConvexRectangle() {
assertConcave(true, newLinearRing(
assertConvex(true, newLinearRing(
0, 0,
1, 0,
1, 1,
@ -138,21 +138,21 @@ class GeoUtilsTest {
@Test
void testBarelyConvexRectangle() {
assertConcave(true, newLinearRing(
assertConvex(true, newLinearRing(
0, 0,
1, 0,
1, 1,
0.5, 0.5,
0, 0
));
assertConcave(true, newLinearRing(
assertConvex(true, newLinearRing(
0, 0,
1, 0,
1, 1,
0.4, 0.4,
0, 0
));
assertConcave(true, newLinearRing(
assertConvex(true, newLinearRing(
0, 0,
1, 0,
1, 1,
@ -163,7 +163,7 @@ class GeoUtilsTest {
@Test
void testConcaveRectangleDoublePoints() {
assertConcave(true, newLinearRing(
assertConvex(true, newLinearRing(
0, 0,
0, 0,
1, 0,
@ -171,7 +171,7 @@ class GeoUtilsTest {
0, 1,
0, 0
));
assertConcave(true, newLinearRing(
assertConvex(true, newLinearRing(
0, 0,
1, 0,
1, 0,
@ -179,7 +179,7 @@ class GeoUtilsTest {
0, 1,
0, 0
));
assertConcave(true, newLinearRing(
assertConvex(true, newLinearRing(
0, 0,
1, 0,
1, 1,
@ -187,7 +187,7 @@ class GeoUtilsTest {
0, 1,
0, 0
));
assertConcave(true, newLinearRing(
assertConvex(true, newLinearRing(
0, 0,
1, 0,
1, 1,
@ -195,7 +195,7 @@ class GeoUtilsTest {
0, 1,
0, 0
));
assertConcave(true, newLinearRing(
assertConvex(true, newLinearRing(
0, 0,
1, 0,
1, 1,
@ -207,7 +207,7 @@ class GeoUtilsTest {
@Test
void testBarelyConcaveRectangle() {
assertConcave(false, newLinearRing(
assertConvex(false, newLinearRing(
0, 0,
1, 0,
1, 1,
@ -218,7 +218,7 @@ class GeoUtilsTest {
@Test
void test5PointsConcave() {
assertConcave(false, newLinearRing(
assertConvex(false, newLinearRing(
0, 0,
0.5, 0.1,
1, 0,
@ -226,7 +226,7 @@ class GeoUtilsTest {
0, 1,
0, 0
));
assertConcave(false, newLinearRing(
assertConvex(false, newLinearRing(
0, 0,
1, 0,
0.9, 0.5,
@ -234,7 +234,7 @@ class GeoUtilsTest {
0, 1,
0, 0
));
assertConcave(false, newLinearRing(
assertConvex(false, newLinearRing(
0, 0,
1, 0,
1, 1,
@ -242,7 +242,7 @@ class GeoUtilsTest {
0, 1,
0, 0
));
assertConcave(false, newLinearRing(
assertConvex(false, newLinearRing(
0, 0,
1, 0,
1, 1,
@ -254,7 +254,7 @@ class GeoUtilsTest {
@Test
void test5PointsColinear() {
assertConcave(true, newLinearRing(
assertConvex(true, newLinearRing(
0, 0,
0.5, 0,
1, 0,
@ -262,7 +262,7 @@ class GeoUtilsTest {
0, 1,
0, 0
));
assertConcave(true, newLinearRing(
assertConvex(true, newLinearRing(
0, 0,
1, 0,
1, 0.5,
@ -270,7 +270,7 @@ class GeoUtilsTest {
0, 1,
0, 0
));
assertConcave(true, newLinearRing(
assertConvex(true, newLinearRing(
0, 0,
1, 0,
1, 1,
@ -278,7 +278,7 @@ class GeoUtilsTest {
0, 1,
0, 0
));
assertConcave(true, newLinearRing(
assertConvex(true, newLinearRing(
0, 0,
1, 0,
1, 1,
@ -288,17 +288,14 @@ class GeoUtilsTest {
));
}
private static void assertConcave(boolean isConcave, LinearRing ring) {
private static void assertConvex(boolean isConvex, LinearRing ring) {
for (double rotation : new double[]{0, 90, 180, 270}) {
LinearRing rotated = (LinearRing) AffineTransformation.rotationInstance(Math.toRadians(rotation)).transform(ring);
for (boolean flip : new boolean[]{false, true}) {
LinearRing flipped = flip ? (LinearRing) AffineTransformation.scaleInstance(-1, 1).transform(rotated) : rotated;
for (boolean reverse : new boolean[]{false, true}) {
LinearRing reversed = reverse ? flipped.reverse() : flipped;
assertEquals(isConcave, isConcave(reversed),
"rotation=" + rotation + " flip=" + flip + " reverse=" + reverse);
assertEquals(!isConcave, isConvex(reversed),
"rotation=" + rotation + " flip=" + flip + " reverse=" + reverse);
assertEquals(isConvex, isConvex(reversed), "rotation=" + rotation + " flip=" + flip + " reverse=" + reverse);
}
}
}