已知三点A,B,C坐标分别为(x1,y1),(x2,y2),(x3,y3),设有经过点B,点C的直线BC,计算经过点A做直线BC的垂线与直线BC交点坐标,并考虑斜率不存在和斜率为0的特殊情况。
# 输入三点坐标
x1, y1 = map(float, input("输入点A的坐标,用逗号分隔:").split(","))
x2, y2 = map(float, input("输入点B的坐标,用逗号分隔:").split(","))
x3, y3 = map(float, input("输入点C的坐标,用逗号分隔:").split(","))
# 判断斜率是否存在
if x3 - x2 != 0:
# 计算直线BC的斜率和截距
slope_BC = (y3 - y2) / (x3 - x2)
intercept_BC = y2 - slope_BC * x2
# 判断斜率是否为0
if slope_BC != 0:
# 计算垂线斜率和截距
slope_perp = -1 / slope_BC
intercept_perp = y1 - slope_perp * x1
# 计算交点坐标
x_intersect = (intercept_BC - intercept_perp) / (slope_perp - slope_BC)
y_intersect = slope_BC * x_intersect + intercept_BC
# 输出结果
print(f"垂线与直线BC的交点坐标为: ({x_intersect:.2f}, {y_intersect:.2f})")
else:
# 直线BC的斜率为0,垂线斜率不存在
x_intersect = x1
y_intersect = y2
print(f"垂线与直线BC的交点坐标为: ({x_intersect:.2f}, {y_intersect:.2f})")
else:
# 直线BC垂直于x轴,垂线斜率为0
x_intersect = x2
y_intersect = y1
print(f"垂线与直线BC的交点坐标为: ({x_intersect:.2f}, {y_intersect:.2f})")
说明:
- 首先判断直线BC的斜率是否存在,若不存在则判断直线BC是否垂直于x轴。
- 当直线BC的斜率存在时,再判断其是否为0,若不为0则计算垂线斜率和截距,并求交点坐标。若为0则垂线与直线BC平行,交点在点B上。
- 当直线BC垂直于x轴时,垂线斜率为0,交点在点C的y坐标上,x坐标与点A相同。
- 最后结果保留两位小数。