mirror of
https://github.com/AtsushiSakai/PythonRobotics.git
synced 2026-01-14 16:08:05 -05:00
* add visibility road map path doc * add visibility road map path doc * add visibility road map path doc * add visibility road map path doc * add visibility road map path doc * add visibility road map path doc * add visibility road map path doc
45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
class Geometry:
|
|
|
|
class Point:
|
|
def __init__(self, x, y):
|
|
self.x = x
|
|
self.y = y
|
|
|
|
@staticmethod
|
|
def is_seg_intersect(p1, q1, p2, q2):
|
|
|
|
def on_segment(p, q, r):
|
|
if ((q.x <= max(p.x, r.x)) and (q.x >= min(p.x, r.x)) and
|
|
(q.y <= max(p.y, r.y)) and (q.y >= min(p.y, r.y))):
|
|
return True
|
|
return False
|
|
|
|
def orientation(p, q, r):
|
|
val = (float(q.y - p.y) * (r.x - q.x)) - (
|
|
float(q.x - p.x) * (r.y - q.y))
|
|
if val > 0:
|
|
return 1
|
|
if val < 0:
|
|
return 2
|
|
return 0
|
|
|
|
# Find the 4 orientations required for
|
|
# the general and special cases
|
|
o1 = orientation(p1, q1, p2)
|
|
o2 = orientation(p1, q1, q2)
|
|
o3 = orientation(p2, q2, p1)
|
|
o4 = orientation(p2, q2, q1)
|
|
|
|
if (o1 != o2) and (o3 != o4):
|
|
return True
|
|
if (o1 == 0) and on_segment(p1, p2, q1):
|
|
return True
|
|
if (o2 == 0) and on_segment(p1, q2, q1):
|
|
return True
|
|
if (o3 == 0) and on_segment(p2, p1, q2):
|
|
return True
|
|
if (o4 == 0) and on_segment(p2, q1, q2):
|
|
return True
|
|
|
|
return False
|