平面上有两条线段A和B,线段A的两端端点坐标分别是(x,yi)和(xz,y2),线段 B的两端端点坐标分别是(x3,y3)和(x4,y4)。输入这四个点的坐标,判断两条线段是否有交点,并输出结果。Python程序
时间: 2023-05-11 11:07:21 浏览: 126
给定平面直角坐标系上的两条线段,判断其是否相交。
以下是Python程序:
```python
def on_segment(p, q, r):
if (q[0] <= max(p[0], r[0]) and q[0] >= min(p[0], r[0]) and
q[1] <= max(p[1], r[1]) and q[1] >= min(p[1], r[1])):
return True
return False
def orientation(p, q, r):
val = (q[1] - p[1]) * (r[0] - q[0]) - (q[0] - p[0]) * (r[1] - q[1])
if val == 0:
return 0
return 1 if val > 0 else 2
def do_intersect(p1, q1, p2, q2):
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
x1, y1 = map(int, input().split())
x2, y2 = map(int, input().split())
x3, y3 = map(int, input().split())
x4, y4 = map(int, input().split())
if do_intersect((x1, y1), (x2, y2), (x3, y3), (x4, y4)):
print("两条线段有交点")
else:
print("两条线段没有交点")
```
输入格式为:
```
x1 y1
x2 y2
x3 y3
x4 y4
```
例如,如果输入:
```
1 1
4 4
1 4
4 1
```
则输出:
```
两条线段有交点
```
阅读全文