python判断两线段是否相交_如何检查两个线段是否相交?

直线的方程式是:f(x) = A*x + b = y

对于一个段,它是完全相同的,只是x包含在一个区间I上

如果有两个段,定义如下:Segment1 = {(X1, Y1), (X2, Y2)}

Segment2 = {(X3, Y3), (X4, Y4)}

潜在交点(Xa,Ya)的方位角Xa必须包含在区间I1和I2中,定义如下:I1 = [min(X1,X2), max(X1,X2)]

I2 = [min(X3,X4), max(X3,X4)]

我们可以说Xa包括在:Ia = [max( min(X1,X2), min(X3,X4) ),

min( max(X1,X2), max(X3,X4) )]

现在,我们需要检查这个间隔Ia是否存在:if (max(X1,X2) < min(X3,X4)):

return False # There is no mutual abcisses

所以,我们有两个直线公式,和一个相互间隔。你的直线公式是:f1(x) = A1*x + b1 = y

f2(x) = A2*x + b2 = y

当我们逐段得到两个点时,我们能够确定A1、A2、b1和b2:A1 = (Y1-Y2)/(X1-X2) # Pay attention to not dividing by zero

A2 = (Y3-Y4)/(X3-X4) # Pay attention to not dividing by zero

b1 = Y1-A1*X1 = Y2-A1*X2

b2 = Y3-A2*X3 = Y4-A2*X4

如果段是平行的,则A1==A2:if (A1 == A2):

return False # Parallel segments

位于两条线上的点(Xa,Ya)必须验证公式f1和f2:Ya = A1 * Xa + b1

Ya = A2 * Xa + b2

A1 * Xa + b1 = A2 * Xa + b2

Xa = (b2 - b1) / (A1 - A2) # Once again, pay attention to not dividing by zero

最后要做的是检查Xa是否包含在Ia中:if ( (Xa < max( min(X1,X2), min(X3,X4) )) or

(Xa > min( max(X1,X2), max(X3,X4) )) ):

return False # intersection is out of bound

else:

return True

除此之外,您可以在启动时检查所提供的四个点中的两个不等于,以避免所有的测试。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值