求点到线段的垂足

来源:互联网 发布:淘宝店铺名字测试打分 编辑:程序博客网 时间:2024/04/29 07:36
第一种: 设直线方程为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; 

然后再判断垂足是否在线段上,如果在线段上则返回垂足;如果不在则计算两端点 

到垂足的距离,选择距离垂足较近的端点返回。


From:http://blog.csdn.net/devilnov/article/details/9089937

0 0