import numpy as np
def pedal(p1, p2, p3):
"""
过p3作p1和p2相连直线的垂线, 计算垂足的坐标
直线1:垂足坐标和p3连线
直线2: p1和p2连线
两条直线垂直, 且交点为垂足
:param p1: (x1, y1)
:param p2: (x2, y2)
:param p3: (x3, y3)
:return: 垂足坐标 (x, y)
"""
if p2[0] != p1[0]:
# ########## 根据点x1和x2计算线性方程的k, b
k, b = np.linalg.solve([[p1[0], 1], [p2[0], 1]], [p1[1], p2[1]]) # 得到k和b
# #######原理: 垂直向量数量积为0
x = np.divide(((p2[0] - p1[0]) * p3[0] + (p2[1] - p1[1]) * p3[1] - b * (p2[1] - p1[1])),
(p2[0] - p1[0] + k * (p2[1] - p1[1])))
y = k * x + b
else: # 点p1和p2的连线垂直于x轴时
x = p1[0]
y = p3[1]
return x, y
if __name__ == '__main__':
x0, y0 = pedal((20, 60), (120, 100), (70, 30))
print(f"垂足的坐标是 {x0, y0}")
过一点做两个点确定的直线的垂线,计算垂足坐标
最新推荐文章于 2023-03-11 16:04:46 发布