Computes the point nearest to the specified point p3 on the line defined by the two points p1 and p2. - Java java.lang

Java examples for java.lang:Math Geometry Line

Description

Computes the point nearest to the specified point p3 on the line defined by the two points p1 and p2.

Demo Code

// Copyright (C) 2002-2012 Three Rings Design, Inc., All Rights Reserved
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.geom.Point2D;
import static com.threerings.geom.Log.log;

public class Main{
    /**/*from  w  ww  . jav a2 s  . c o m*/
     * Computes the point nearest to the specified point <code>p3</code> on the line defined by the
     * two points <code>p1</code> and <code>p2</code>. The computed point is stored into
     * <code>n</code>.  <em>Note:</em> <code>p1</code> and <code>p2</code> must not be coincident.
     *
     * @param p1 one point on the line.
     * @param p2 another point on the line (not equal to <code>p1</code>).
     * @param p3 the point to which we wish to be most near.
     * @param n the point on the line defined by <code>p1</code> and <code>p2</code> that is
     * nearest to <code>p</code>.
     *
     * @return the point object supplied via <code>n</code>.
     */
    public static Point nearestToLine(Point p1, Point p2, Point p3, Point n) {
        // see http://astronomy.swin.edu.au/~pbourke/geometry/pointline/ for a (not very good)
        // explanation of the math
        int Ax = p2.x - p1.x, Ay = p2.y - p1.y;
        float u = (p3.x - p1.x) * Ax + (p3.y - p1.y) * Ay;
        u /= (Ax * Ax + Ay * Ay);
        n.x = p1.x + Math.round(Ax * u);
        n.y = p1.y + Math.round(Ay * u);
        return n;
    }
}

Related Tutorials