前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个并不复杂的数学问题:由两个点计算直线方程

一个并不复杂的数学问题:由两个点计算直线方程

作者头像
明月AI
发布2023-08-26 15:03:13
2650
发布2023-08-26 15:03:13
举报
文章被收录于专栏:野生AI架构师

问题很简单,就是输入两个点的坐标,返回一个直线方程的参数,原来的实现:

代码语言:javascript
复制
def fit_line(p1, p2):
    """直线一般方程
    AX+BY+C=0
    :param p1, p2: 两点的坐标
    :return A, B, C
    """
    x1, y1 = p1
    x2, y2 = p2
    if abs(x1-x2) >= abs(y1-y2):   # y = ax + b
        a = (y1-y2) / (x1-x2)
        b = y1 - a * x1
        return a, -1, b

    # x = ay + b
    a = (x1-x2) / (y1-y2)
    b = x1 - a * y1
    return 1, -a, -b

这个函数是要返回直线的一般方程:ax+by+c=0,实现的时候注意到了x=c或者y=c这类特殊的直线,所以实现的时候才有了if分支判断。

这个实现没什么问题,不过就是看着别扭,计算一个直线方程,居然要加上分支判断,直觉告诉我应该是有更加简洁的计算公式。

拿起笔计算一下:

上图在计算a和b的时候,并不严谨,不过我们只需要计算一组值。

有了这个,实现就简单了:

代码语言:javascript
复制
def fit_line(p1, p2):
    """直线一般方程
        AX+BY+C=0
    :param p1, p2: 两点的坐标
    :return A, B, C
    """
    x1, y1 = p1
    x2, y2 = p2
    A = y2 - y1
    B = x1 - x2
    C = x2 * y1 - x1 * y2
    return A, B, C

其实很简单。

问题是:作为数学专业毕业的,以前怎么没有想到这点呢?估计陷到了x=c和y=c这两种特殊情况里去了,被分母不能为零绊住了,但是其实只要稍微拿起笔计算一下,问题就迎刃而解了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 野生AI架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档