题解 | 两直线交点
两直线交点
https://www.nowcoder.com/practice/b14130882e704fd6aa57f8762ae17bac
class Point:
def __init__(self, x=0.0, y=0.0):
self.x = x
self.y = y
class Line:
def __init__(self, point_a=None, point_b=None):
self.point_A = point_a if point_a is not None else Point()
self.point_B = point_b if point_b is not None else Point()
def find_meeting_point(line_A, line_B):
# TODO: 求直线 line_A 与 line_B 的交点
Kab = -1.0
Kcd = -1.0
# AB铅垂线
if (line_A.point_B.x-line_A.point_A.x)==0:
Kab = 999.09
Bab = 999.09
else:
Kab = (line_A.point_B.y - line_A.point_A.y)/(line_A.point_B.x-line_A.point_A.x)
Bab = line_A.point_A.y - Kab * line_A.point_A.x
# cd铅垂线
if (line_B.point_B.x-line_B.point_A.x)==0:
Kcd = 999.09
Bab = 999.09
else:
Kcd = (line_B.point_B.y - line_B.point_A.y)/(line_B.point_B.x-line_B.point_A.x)
Bcd = line_B.point_A.y - Kcd * line_B.point_A.x
# 平行
if (Kab == Kcd):
return Point(-1,-1)
# 有唯一交点
else:
# AB铅垂线
if Kab == 999.09:
Y = Kcd * line_A.point_A.x + Bcd
return Point(line_A.point_A.x, Y)
# CD铅垂线
elif Kcd == 999.09:
Y = Kab * line_B.point_A.x + Bab
return Point(line_B.point_A.x, Y)
# 无铅垂线
else:
X = -1*(Bab-Bcd)/(Kab-Kcd)
Y = Kab*X+Bab
return Point(X,Y)
return Point(-1,-1)
def main():
data = list(map(float, input().split()))
data.extend(list(map(float, input().split())))
A = Point(data[0], data[1])
B = Point(data[2], data[3])
C = Point(data[4], data[5])
D = Point(data[6], data[7])
AB = Line(A, B)
CD = Line(C, D)
ans = find_meeting_point(AB, CD)
print("{:.6f} {:.6f}".format(ans.x,ans.y))
if __name__ == "__main__":
main()
查看13道真题和解析