zoukankan      html  css  js  c++  java
  • 求点到直线的最短距离及垂足

    一、根据两点求直线方程

    已知直线上两点为:(x1,x2),(y1,y2);

    设方程为:Ax+By+C=0;

    1. 求斜率:k=(y2-y1)/(x2-x1);

    2. 直线方程为: y-y1=k(x-x1);

    换算得:kx-y+y1-kx1=0,即:

    A=k
    B=-1
    C=y1-kx1=y1-(y2-y1)/(x2-x1)*x1

    二、求距离和垂足公式

    1. 点(x0,y0)到直线的距离公式为:

    d=abs(Ax0+By0+C)/sqrt(A*A+B*B);

    2. 设垂足为p,则:

    p.x=(B*B*x0-A*B*y0-A*C)/(A*A+B*B)
    p.y=(A*A*y0-A*B*x0-B*C)/(A*A+B*B) 

    三、 代码

    输入点和线段,返回距离和垂足

     1 function getDistanceP2L(point,line){
     2 
     3 var x1=line.startPoint.x;
     4 var y1=line.startPoint.y;
     5 var x2=line.endPoint.x;
     6 var y2=line.endPoint.y;
     7 var x0=point.x;
     8 var y0=point.y;
     9 
    10 var k=x1==x2?10000:(y2-y1)/(x2-x1);//当x1=x2时,给斜率设一个较大值10000
    11 var a=k;
    12 var b=-1;
    13 var c=y1-k*x1;
    14 
    15 var d=Math.abs(a*x0+b*y0+c)/Math.sqrt(a*a+b*b);
    16 
    17 var px=(b*b*x0-a*b*y0-a*c)/(a*a+b*b);
    18 var py=(a*a*y0-a*b*x0-b*c)/(a*a+b*b); 
    19 var p=new Point(px,py);
    20 
    21 return [d,p];
    22 }
  • 相关阅读:
    5.5 数据库约束
    5.4 数据库数据类型
    5.3 数据 库,表 操作
    5.2 数据库引擎
    5.1 数据库安装
    4.6 并发编程/IO模型
    4.5 协程
    4.4 线程
    在线编辑器 引入方法
    MySQL查看版本号的五种方式介绍1111111
  • 原文地址:https://www.cnblogs.com/snsart/p/10954593.html
Copyright © 2011-2022 走看看