求点到直线的最短距离及垂足
生活随笔
收集整理的這篇文章主要介紹了
求点到直线的最短距离及垂足
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、根據(jù)兩點求直線方程
已知直線上兩點為:(x1,x2),(y1,y2);
設(shè)方程為: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. 設(shè)垂足為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);//當(dāng)x1=x2時,給斜率設(shè)一個較大值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 }
總結(jié)
以上是生活随笔為你收集整理的求点到直线的最短距离及垂足的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ESP8266 wifi干扰、钓鱼实现
- 下一篇: 转载-使用 Feed4JUnit 进行数