博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

求点到已知直线的距离和点到直线的垂点坐标

Posted on 2013-06-24 17:55  GIS xiang  阅读(2782)  评论(2编辑  收藏  举报

<script>alert(1)</script>

已知点(x,y),直线的两点(sx,sy),(ex,ey);

(一)计算点到直线的距离
      var a:Number = (ey - sy)/(ex- sx);
      var b:Number = -1;
      var c:Number = sy-a*sx;
      距离td = Math.abs(a*x+b*y+c)/Math.sqrt(a*a+b*b);      
(二)计算垂足的坐标
 方法一:设直线方程为ax+by+c=0,点坐标为(m,n),则垂足为((b*b*m-a*b*n-a*c)/(a*a+b*b),(a*a*n-a*b*m-b*c)/(a*a+b*b))
方法二:

如果该线段平行于X轴(Y轴),则过点point作该线段所在直线的垂线,垂足很容
易求得,然后计算出垂足,如果垂足在线段上则返回垂足,否则返回离垂足近的端
点;

如果该线段不平行于X轴也不平行于Y轴,则斜率存在且不为0。设线段的两端点为
pt1和pt2,斜率为:
k = ( pt2.y - pt1. y ) / (pt2.x - pt1.x );
该直线方程为:
y = k* ( x - pt1.x) + pt1.y
其垂线的斜率为 - 1 / k,
垂线方程为:
y = (-1/k) * (x - point.x) + point.y
联立两直线方程解得:
x  =  ( k^2 * pt1.x + k * (point.y - pt1.y ) + point.x ) / ( k^2 + 1)
y  =  k * ( x - pt1.x) + pt1.y;

然后再判断垂足是否在线段上,如果在线段上则返回垂足;如果不在则计算两端点
到垂足的距离,选择距离垂足较近的端点返回。

参考:http://blog.csdn.net/Camper_beijing/article/details/2863800