'構造体
Private Type POINT
x As Double
y As Double
End Type
'座標 p1,p2 を結ぶ線分と座標 p3,p4 を結ぶ線分が交差しているかを調べる
'ただし、線分が重なっている場合(3点,4点が一直線上にある)、「交差している」、と判定します。
Private Function intersectionEX(p1 As POINT, p2 As POINT, _
p3 As POINT, p4 As POINT) As Boolean
'x座標によるチェック
If (p1.x >= p2.x) Then
If ((p1.x < p3.x And p1.x < p4.x) Or (p2.x > p3.x And p2.x > p4.x)) Then
intersectionEX = False: Exit Function
End If
Else
If ((p2.x < p3.x And p2.x < p4.x) Or (p1.x > p3.x And p1.x > p4.x)) Then
intersectionEX = False: Exit Function
End If
End If
'y座標によるチェック
If (p1.y >= p2.y) Then
If ((p1.y < p3.y And p1.y < p4.y) Or (p2.y > p3.y And p2.y > p4.y)) Then
intersectionEX = False: Exit Function
End If
Else
If ((p2.y < p3.y And p2.y < p4.y) Or (p1.y > p3.y And p1.y > p4.y)) Then
intersectionEX = False: Exit Function
End If
End If
If (((p1.x - p2.x) * (p3.y - p1.y) + (p1.y - p2.y) * (p1.x - p3.x)) * _
((p1.x - p2.x) * (p4.y - p1.y) + (p1.y - p2.y) * (p1.x - p4.x)) > 0#) Then
intersectionEX = False: Exit Function
End If
If (((p3.x - p4.x) * (p1.y - p3.y) + (p3.y - p4.y) * (p3.x - p1.x)) * _
((p3.x - p4.x) * (p2.y - p3.y) + (p3.y - p4.y) * (p3.x - p2.x)) > 0#) Then
intersectionEX = False: Exit Function
End If
intersectionEX = True
End Function
|