过一点做两个点确定的直线的垂线,计算垂足坐标

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}")

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值