Android examples for Graphics:Path Point
point Line Distance
/*/*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; } }