切磋:关于点到线段的距离问题?
已知线段两点坐标和线段外一点坐标,求取点到线的距离?我已经实现了,只是觉得效率比较低,望高人指点一下
我的思路是:1.先搞一个函数判断点和线段有没有垂直(这个有点复杂,也许是我自己搞得的复杂了),根据直线方程(Y=KX+B)的性质:相互垂直的直线其K值互为负倒 数,然后求取所有与已知线段垂直直线的偏移范围(与B值有关),最后确定通过线段外点的直线是否在此范围内,进而判断垂直与否
2.如果不垂直,则分别计算点到线段两个端点的距离,然后比较大小
3.如果垂直,则根据通过已知点并平行于线段的直线方程的偏移距离测算点到线段的距离!
自己都晕了呵呵 ,如果有人对此感兴趣,我可以把代码贴出来
最重要的是请高人指点简便方法
不知道你的点到线段的距离是怎么定义的,是不是线段上的和该点最近的点的距离?还仅仅是垂直距离?
在我看来点到线段的距离和点到直线的距离是不一样的
我的定义就是“如果点到线段有垂直的话就是垂直距离,没有垂直就是点到线段端点最近点的距离”,所以要进行判断有没有垂直(也是关键,我这么认为)
点p0到直线(pt1,pt2)的距离?
这个问题用解析代数法比较简单.
1. 设直线
(应该说线段)的长为L
L=sqr( (pt2(0)-pt1(0))^2 + (pt2(1)-pt1(1))^2 + (pt2(2)-pt1(2))^2 )
2. 直线(pt1,pt2)的单位矢量为
v= (pt2 - pt1) / L, [ v(i) = (pt2(i) - pt1(i)) / L ,(i=0,1,2) ]
这里就产生一个限制条件, 也是解这个问题的唯一的限制条件,
即 L不能等于0(L>0)
3. 过点p0与直线的任意一端点(可假定为pt1),可以做一矢量n
n = p0 - pt1 , [ n(i) = p0(i) - pt1(i),(i=0,1,2) ]
矢量n的长度Ln= sqr( n(0)^2 + n(1)^2 + n(2)^2 )
4. p0到直线的垂足设为p, p0到p的长度d 为所要求的结果.
如上图, p到pt1的长度t可由矢量的内积运算求出
t=n·v
t=n(0)*v(0)+ n(1)*v(1)+ n(2)*v(2)
由勾股定理,
d=sqr(t^2 + Ln^2)
5. 结论
只要直线长度不为0, 就可以用上述方法求出点到直线的距离
页:
[1]