Here you can find the source of squareSegmentDistance(float[] p, int a, int b, int c)
public static float squareSegmentDistance(float[] p, int a, int b, int c)
//package com.java2s; /*/* w w w . ja v a2 s.co m*/ * Copyright 2012, 2013 Hannes Janetzek * * This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * * This program is free software: you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License along with * this program. If not, see <http://www.gnu.org/licenses/>. */ public class Main { /** * 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; } }