本人数学渣渣,公式来自知乎大佬,大佬真是太强了。
https://www.zhihu.com/question/381406535/answer/1095948349
用方程法,避开了算K,真是太强了x2。
def calc_abc_from_line_2d(x0, y0, x1, y1):
a = y0 - y1
b = x1 - x0
c = x0*y1 - x1*y0
return a, b, c
def get_line_cross_point(line1, line2):
# x1y1x2y2
a0, b0, c0 = calc_abc_from_line_2d(*line1)
a1, b1, c1 = calc_abc_from_line_2d(*line2)
D = a0 * b1 - a1 * b0
if D == 0:
return None
x = (b0 * c1 - b1 * c0) / D
y = (a1 * c0 - a0 * c1) / D
# print(x, y)
return x, y
if __name__ == '__main__':
# x1y1x2y2
line1 = [0, 5, 0, 10]
line2 = [5, 0, 10, 0]
cross_pt = get_line_cross_point(line1, line2)
print(cross_pt)