zoukankan      html  css  js  c++  java
  • 点到直线和点到线段的最短距离

    一.点到直线距离

            已知一个点P(X0, Y0), 求点到直线Ax + By + C = 0的距离公式为:d = [AX0 + BY0 + C的绝对值]/[(A^2 + B^2)的算术平方根],如求点P(-1, 2)到直线2X + Y - 10 = 0的距离:X0 = -1, Y0 = 2, A = 2, B = 1, C = -10 代入公式
    d =[2 * (-1) + 1 * 2 - 10 的绝对值] / 根号[2 * 2 + 1 * 1] = 10 /
    根号5。

            已知两点的坐便(x1, y1),(x2, y2) ,另外一个点的坐标是(x0, y0); 求(x0, y0)到经过(x1, y1) (x2, y2)直线的距离。
            直线方程中 A = y2 - y1,B = x1- x2,C = x2 * y1 - x1 * y2(叉积);点的直线的距离公式为: double d = (fabs((y2 - y1) * x0 +(x1 - x2) * y0 + ((x2 * y1) -(x1
    * y2)))) / (sqrt(pow(y2 - y1, 2) + pow(x1 - x2, 2)))。

    二.点到线段最短距离

    private static double distance(Point p, Point p1) {
    
        return Math.hypot(p.x-p1.x, p.y-p1.y);
    
      }
    
      //点到线段的最短距离,x0,y0是圆心
    
      private static double pointToLine(Point p1,Point p2, Point p) {
    
        double ans = 0;
    
        double a, b, c;
    
        a = distance(p1, p2);
    
        b = distance(p1, p);
    
        c = distance(p2, p);
    
        if (c+b==a) {//点在线段上
    
          ans = 0;
    
          return ans;
    
        }
    
        if (a<=0.00001) {//不是线段,是一个点
    
          ans = b;
    
          return ans;
    
        }
    
        if (c*c >= a*a + b*b) { //组成直角三角形或钝角三角形,p1为直角或钝角
    
          ans = b;
    
          return ans;
    
        }
    
        if (b * b >= a * a + c * c) {// 组成直角三角形或钝角三角形,p2为直角或钝角
    
          ans = c;
    
          return ans;
    
        }
    
        // 组成锐角三角形,则求三角形的高
    
        double p0 = (a + b + c) / 2;// 半周长
    
        double s = Math.sqrt(p0 * (p0 - a) * (p0 - b) * (p0 - c));// 海伦公式求面积
    
        ans = 2*s / a;// 返回点到线的距离(利用三角形面积公式求高)
    
        return ans;
    
      }
  • 相关阅读:
    从泛型类中继承
    DataGridView中的单元格提示错误信息
    C#中的转换
    C#的运算符重载
    解决android模块化升级方法
    个人总结如何在项目管理的实际软件开发工作的几个关键点和控制
    bash no such file or directory in ubuntu 1404
    java 遍历树节点 同时保留所有的从根到叶节点的路径
    ZendFramework2学习笔记 json和ajax
    POJ 2531-Network Saboteur(DFS)
  • 原文地址:https://www.cnblogs.com/hxsyl/p/3249763.html
Copyright © 2011-2022 走看看