乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 43|回复: 3

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

[复制链接]

8

主题

31

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2007-10-27 18:39:00 | 显示全部楼层 |阅读模式
已知线段两点坐标和线段外一点坐标,求取点到线的距离?
我已经实现了,只是觉得效率比较低,望高人指点一下
我的思路是:1.先搞一个函数判断点和线段有没有垂直(这个有点复杂,也许是我自己搞得的复杂了),根据直线方程(Y=KX+B)的性质:相互垂直的直线其K值互为负倒 数,然后求取所有与已知线段垂直直线的偏移范围(与B值有关),最后确定通过线段外点的直线是否在此范围内,进而判断垂直与否
2.如果不垂直,则分别计算点到线段两个端点的距离,然后比较大小
3.如果垂直,则根据通过已知点并平行于线段的直线方程的偏移距离测算点到线段的距离!
自己都晕了  呵呵    ,如果有人对此感兴趣,我可以把代码贴出来
最重要的是请高人指点简便方法
回复

使用道具 举报

13

主题

31

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

8

主题

31

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2007-10-30 12:31:00 | 显示全部楼层

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

使用道具 举报

17

主题

68

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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


0rjbqzb4xgl.jpg

0rjbqzb4xgl.jpg


点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, 就可以用上述方法求出点到直线的距离
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-6 07:37 , Processed in 0.974536 second(s), 63 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表