判断两点连线是否与线段相交 判断两线段是否相交

https://blog.csdn.net/tengchongwei/article/details/72922056

1、如图a(x1,y1) b(x2,y2) c(x3,y3) d(x4,y4)

判断c,d是否在线段两端,只需要判断ad和ac的斜率一个比ab的斜率大 另一个比ab的斜率小就行了。判断c在直线ab的上方和判断d在直线ab的下方或者向量是否跨立,最终化简后也可以归根于判断斜率问题。

1、使用链接中的方式,先判断线段的bound是否会相交,加快排除过程再进行如下操作。

2、判断C、D与直线ab的关系

bool value = false;
if((y3-y2)/(x3-x2)<(y1-y2)/(x1-x2))
    value = ! value;
if(y4-y2)/(x4-x2)<(y1-y2)/(x1-x2))
    value = ! value;
return value;

可将除法转换为乘法
bool value = false;
if((y3-y2)*(x1-x2)<(y1-y2)*(x3-x2))
    value = ! value;
if(y4-y2)*(x1-x2)<(y1-y2)*(x4-x2))
    value = ! value;
return value;

3、再按同样的步骤判断A、B与直线cd的关系。

如果最终返回true ,则定会相交
 

判断线段相交的另一种方法
 

求交点:http://www-cs.ccny.cuny.edu/~wolberg/capstone/intersection/Intersection%20point%20of%20two%20lines.html

这种方式比较快,将 除法次数降到1

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值