point Line Distance - Android Graphics

Android examples for Graphics:Path Point

Description

point Line Distance

Demo Code

/*/*from   www.ja  v  a 2 s  .  co  m*/
 BlueFlyVario flight instrument - http://www.alistairdickie.com/blueflyvario/
 Copyright (C) 2011-2012 Alistair Dickie

 BlueFlyVario is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 BlueFlyVario 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 General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with BlueFlyVario.  If not, see <http://www.gnu.org/licenses/>.
 */
import android.graphics.RectF;

public class Main{
    public static double pointLineDistance(Point2d u, Point2d v, Point2d p,
            boolean isSegment) {
        double dist = crossProduct(u, v, p) / distance(u, v);
        if (isSegment) {
            double dot1 = dotProduct(u, v, p);
            if (dot1 > 0)
                return distance(v, p);

            double dot2 = dotProduct(v, u, p);
            if (dot2 > 0)
                return distance(u, p);
        }
        return Math.abs(dist);
    }
    public static double pointLineDistance(Line2d line, Point2d p,
            boolean isSegment) {
        return pointLineDistance(line.u, line.v, p, isSegment);
    }
    public static double crossProduct(Point2d pointA, Point2d pointB,
            Point2d pointC) {
        Point2d AB = new Point2d();
        Point2d AC = new Point2d();
        AB.x = pointB.x - pointA.x;
        AB.y = pointB.y - pointA.y;
        AC.x = pointC.x - pointA.x;
        AC.y = pointC.y - pointA.y;
        return AB.x * AC.y - AB.y * AC.x;

    }
    public static double distance(Point2d pointA, Point2d pointB) {
        double d1 = pointA.x - pointB.x;
        double d2 = pointA.y - pointB.y;

        return Math.sqrt(d1 * d1 + d2 * d2);
    }
    public static double dotProduct(Point2d pointA, Point2d pointB,
            Point2d pointC) {
        Point2d AB = new Point2d();
        Point2d BC = new Point2d();
        AB.x = pointB.x - pointA.x;
        AB.y = pointB.y - pointA.y;
        BC.x = pointC.x - pointB.x;
        BC.y = pointC.y - pointB.y;
        return AB.x * BC.x + AB.y * BC.y;

    }
}

Related Tutorials