【Python】经过一个点P3的一条直线垂直于已知直线,求交点坐标

一个高中数学题目,已经点P1和点P2构成直线,经过P3点做已知直线的垂线,求垂线与已知直线的交点坐标。
在这里插入图片描述

p1 = [100, 15]
p2 = [16, 85]
p3 = [-50, 100]
if p2[0] - p1[0] == 0:
    # p1 p2 构成垂线,那么垂直线就是一条水平线
    x = p1[0]
    y = p3[1]
elif p2[1] - p1[1] == 0:
    # p1 p2 构成水平线,那么垂直线就是一条垂直线
    x = p3[0]
    y = p1[1]
else:
    slope = (p2[1] - p1[1]) / (p2[0] - p1[0])
    perpendicularSlope = -1 / slope
    intercept = p3[1] - perpendicularSlope * p3[0]
    x = (p3[1] - p1[1] + slope * p1[0] - perpendicularSlope * p3[0]) / (slope - perpendicularSlope)
    y = slope * (x - p1[0]) + p1[1]

# 绘制两条直线和交点
import matplotlib.pyplot as plt

plt.figure(figsize=(10, 10))
plt.plot([p1[0], p2[0]], [p1[1], p2[1]], color='b')
plt.plot([p3[0], x], [p3[1], y], color='r')
plt.scatter([x], [y], color='r')
# 给P1,P2,P3点加注释
plt.annotate('P1', xy=(p1[0], p1[1]), xytext=(p1[0] + 0.5, p1[1] + 0.5))
plt.annotate('P2', xy=(p2[0], p2[1]), xytext=(p2[0] + 0.5, p2[1] + 0.5))
plt.annotate('P3', xy=(p3[0], p3[1]), xytext=(p3[0] + 0.5, p3[1] + 0.5))
# 给交点加注释
plt.annotate('JD', xy=(x, y), xytext=(x + 0.5, y + 0.5))
# 让坐标轴比例一样
plt.axis('equal')
plt.show()

猜你喜欢

转载自blog.csdn.net/x1131230123/article/details/131440125