明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2424|回复: 3

切磋:关于点到线段的距离问题?

[复制链接]
发表于 2007-10-27 18:39:00 | 显示全部楼层 |阅读模式

已知线段两点坐标和线段外一点坐标,求取点到线的距离?

我已经实现了,只是觉得效率比较低,望高人指点一下

我的思路是:1.先搞一个函数判断点和线段有没有垂直(这个有点复杂,也许是我自己搞得的复杂了),根据直线方程(Y=KX+B)的性质:相互垂直的直线其K值互为负倒 数,然后求取所有与已知线段垂直直线的偏移范围(与B值有关),最后确定通过线段外点的直线是否在此范围内,进而判断垂直与否

 2.如果不垂直,则分别计算点到线段两个端点的距离,然后比较大小

 3.如果垂直,则根据通过已知点并平行于线段的直线方程的偏移距离测算点到线段的距离!

自己都晕了  呵呵    ,如果有人对此感兴趣,我可以把代码贴出来

最重要的是请高人指点简便方法

发表于 2007-10-30 08:41:00 | 显示全部楼层

不知道你的点到线段的距离是怎么定义的,是不是线段上的和该点最近的点的距离?还仅仅是垂直距离?

 楼主| 发表于 2007-10-30 12:31:00 | 显示全部楼层
chenyaqiou发表于2007-10-30 8:41:00不知道你的点到线段的距离是怎么定义的,是不是线段上的和该点最近的点的距离?还仅仅是垂直距离?

在我看来点到线段的距离和点到直线的距离是不一样的

我的定义就是“如果点到线段有垂直的话就是垂直距离,没有垂直就是点到线段端点最近点的距离”,所以要进行判断有没有垂直(也是关键,我这么认为)

发表于 2007-10-30 13:17:00 | 显示全部楼层

 

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, p0p的长度d 为所要求的结果.

如上图, ppt1的长度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, 就可以用上述方法求出点到直线的距离

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 12:18 , Processed in 0.172710 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表