From 7ae8ee44056d590342e81434546a082813894484 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Sat, 25 Jan 2014 10:05:33 +0100 Subject: [PATCH] add GeometryUtils.squareSegmentDistance() --- vtm/src/org/oscim/utils/GeometryUtils.java | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/vtm/src/org/oscim/utils/GeometryUtils.java b/vtm/src/org/oscim/utils/GeometryUtils.java index f609ff2f..c7b71969 100644 --- a/vtm/src/org/oscim/utils/GeometryUtils.java +++ b/vtm/src/org/oscim/utils/GeometryUtils.java @@ -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; + } + }