Merge pull request #664 from Gustl22/geometry_utils
GeometryUtils: Fix reverse clockwise check
This commit is contained in:
commit
f6af3d7410
45
vtm-tests/test/org/oscim/utils/GeometryTest.java
Normal file
45
vtm-tests/test/org/oscim/utils/GeometryTest.java
Normal file
@ -0,0 +1,45 @@
|
||||
package org.oscim.utils;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.oscim.utils.geom.GeometryUtils;
|
||||
|
||||
public class GeometryTest {
|
||||
|
||||
@Test
|
||||
public void testIsTrisClockwise() {
|
||||
float[] pA = new float[]{0, 0};
|
||||
float[] pB = new float[]{1, 1};
|
||||
float[] pC = new float[]{1, 0};
|
||||
|
||||
float area = GeometryUtils.isTrisClockwise(pA, pB, pC);
|
||||
Assert.assertTrue(area > 0);
|
||||
|
||||
area = GeometryUtils.isTrisClockwise(pA, pC, pB);
|
||||
Assert.assertTrue(area < 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsClockwise() {
|
||||
float[] points = new float[]{0, 0, 1, 1, 1, 0};
|
||||
|
||||
float area = GeometryUtils.isClockwise(points, points.length);
|
||||
Assert.assertTrue(area > 0);
|
||||
|
||||
points = new float[]{0, 0, 1, 0, 1, 1};
|
||||
area = GeometryUtils.isClockwise(points, points.length);
|
||||
Assert.assertTrue(area < 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDotProduct() {
|
||||
float[] p = {-1, 0, 0, 0, 0, 0};
|
||||
|
||||
for (int i = 0; i < 9; i++) {
|
||||
p[4] = (float) Math.cos(Math.toRadians(i * 45));
|
||||
p[5] = (float) Math.sin(Math.toRadians(i * 45));
|
||||
System.out.println("\n> " + (i * 45) + " " + p[3] + ":" + p[4] + "\n="
|
||||
+ GeometryUtils.dotProduct(p, 0, 2, 4));
|
||||
}
|
||||
}
|
||||
}
|
@ -322,9 +322,9 @@ public final class GeometryUtils {
|
||||
public static float isClockwise(float[] points, int n) {
|
||||
float area = 0f;
|
||||
for (int i = 0; i < n - 2; i += 2) {
|
||||
area += (points[i] * points[i + 3]) - (points[i + 1] * points[i + 2]);
|
||||
area += (points[i + 1] * points[i + 2]) - (points[i] * points[i + 3]);
|
||||
}
|
||||
area += (points[n - 2] * points[1]) - (points[n - 1] * points[0]);
|
||||
area += (points[n - 1] * points[0]) - (points[n - 2] * points[1]);
|
||||
|
||||
return 0.5f * area;
|
||||
}
|
||||
@ -418,15 +418,4 @@ public final class GeometryUtils {
|
||||
}
|
||||
return scaled;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
float[] p = {-1, 0, 0, 0, 0, 0};
|
||||
|
||||
for (int i = 0; i < 9; i++) {
|
||||
p[4] = (float) Math.cos(Math.toRadians(i * 45));
|
||||
p[5] = (float) Math.sin(Math.toRadians(i * 45));
|
||||
System.out.println("\n> " + (i * 45) + " " + p[3] + ":" + p[4] + "\n="
|
||||
+ dotProduct(p, 0, 2, 4));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user