求一点向一条直线做垂线的交点

已知三点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相同。
  • 最后结果保留两位小数。

猜你喜欢

转载自blog.csdn.net/Cretheego/article/details/129930582