Java Distance Calculate squareSegmentDistance(float[] p, int a, int b, int c)

Here you can find the source of squareSegmentDistance(float[] p, int a, int b, int c)

Description

square distance from a point a to a segment b,c

License

Open Source License

Declaration


public static float squareSegmentDistance(float[] p, int a, int b, int c) 

Method Source Code

//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;
    }
}

Related

  1. squareDistance(double pointAX, double pointAY, double pointBX, double pointBY)
  2. squareDistance(double x1, double y1, double x2, double y2)
  3. squaredistance(double[] v1, double[] v2)
  4. squareDistance(final double[] a, final double[] b)
  5. squareLength(final float x1, final float y1, final float z1, final float x2, final float y2, final float z2)