add GeometryUtils.squareSegmentDistance()
This commit is contained in:
parent
44fc754b6f
commit
7ae8ee4405
@ -76,4 +76,32 @@ public final class GeometryUtils {
|
||||
|
||||
return (area < 0 ? -area : area) * 0.5f;
|
||||
}
|
||||
|
||||
/** square distance from a point a to a segment b,c */
|
||||
// modified from https://github.com/ekeneijeoma/simplify-java
|
||||
public static float squareSegmentDistance(float[] p, int a, int b, int c) {
|
||||
float x = p[b];
|
||||
float y = p[b + 1];
|
||||
|
||||
float dx = p[c] - x;
|
||||
float dy = p[c + 1] - y;
|
||||
|
||||
if (dx != 0 || dy != 0) {
|
||||
float t = ((p[a] - x) * dx + (p[a + 1] - y) * dy) / (dx * dx + dy * dy);
|
||||
|
||||
if (t > 1) {
|
||||
x = p[c];
|
||||
y = p[c + 1];
|
||||
} else if (t > 0) {
|
||||
x += dx * t;
|
||||
y += dy * t;
|
||||
}
|
||||
}
|
||||
|
||||
dx = p[a] - x;
|
||||
dy = p[a + 1] - y;
|
||||
|
||||
return dx * dx + dy * dy;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user