python算法:已知线性拟合的两条直线求其交点

什么?两直线求交点?这不是初中数学吗??还需要专门写一个算法?
我第一看到这个问题也是这样想的,觉得简直不要太简单,相信如果是在试卷上用笔算一定是半分钟解决的问题,可就是这简简单单的初中题目想要呈现在程序中却足足花了我两个小时。
我第一次遇到这个问题是在做线性拟合模型的时候,两条线性模型交汇于一点,只要求出交点就可以精确的求出影响转折点:(我觉得可能这个算法的应用都在这个领域吧)
在这里插入图片描述
python中还没有能直接表示一条线的类型,因此我们要表示一条直线,应该用什么方法呢?我首先想到的是用两点,因为两点确定一条直线,那么只需要两个坐标,我们就可以确定一条直线。所以我首先把两条直线的x轴和y轴的所有点都打印了出来,随便选两个坐标(最笨的方法)
A,B表示蓝色直线上的两点,可以确定这条线
C,D表示红色直线上的两点,可以确定这条线
在这里插入图片描述
接下来就是核心算法了,直接上代码:

#已知两直线(直线上的两点)求交点的算法:
def line_intersection(line1, line2):  #传入元组
    xdiff = (line1[0][0] - line1[1][0], line2[0][0] - line2[1][0])
    ydiff = (line1[0][1] - line1[1][1], line2[0][1] - line2[1][1])

    def det(a, b):
        return a[0] * b[1] - a[1] * b[0]

    div = det(xdiff, ydiff)
    if div == 0:
       raise Exception('lines do not intersect')

    d = (det(*line1), det(*line2))
    x = det(d, xdiff) / div
    y = det(d, ydiff) / div
    return x, y

需要注意的是,传入的两个点要用元组的形式表示。

#得出交点:
intersection_point = line_intersection((A,B),(C,D))
print(line_intersection((A, B), (C, D)))

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值