[计算几何] (平面上)两线段最短距离 矢量法

知识都是环环相扣的, 在阅读这编文章之前, 要求懂两个知识点

1. 会求点到线段的最短距离     传送门

2. 会判断点与线段位置关系     传送门

如果上面两个知识点都懂, 那么就进入正题了

给出点A1、A2的坐标, 构成线段A1A2, 再给出点B1,B2的坐标, 构成线段B1B2, 求线段A1A2与线段B1B2的最短距离

两条线段的摆放有很多情况

(1) 两线段相交成 X 型

(2) 两线段相交成 T 型

(3) 两线段相交成 ^ 型, 其中有两点重合

(4) 四个点在一条直线上, 视为相交

(5) 两线段不相交

判断两线段是否相交

(1)(2)(3)(4)是两条线段相交的例子, 对于两线段相交的情况, 距离为0, 只要对[判断点与线段位置关系]加以应用, 就能轻松判断出两线段是否相交。

分别检查两条线段, 如果双方都符合"另一条线段的两个端点分别位于当前线段的顺时针方向和逆时针方向", 则两条线段相交。

判断线段A1A2与线段B1B2是否相交的程序可以像下面这样写

if (dir(A1, A2, B1)*dir(A1, A2, B2) <= 0 && dir(B1, B2, A1)*dir(B1, B2, A2) <= 0)  
    cout << "相交" << endl;  

只要事先将 dir 返回值定义为

逆时针          

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值