求两直线(线段)的交点 点斜式 解方程

 原文:

OpenCV计算两条直线的交点_opencv计算两直线交点_armos的博客-CSDN博客

bool getCrossPoint(cv::Point2i &out, cv::Point2i p1, cv::Point2i p2, cv::Point2i p3, cv::Point2i p4)
{
    int x1 = p1.x;
    int y1 = p1.y;
    int x2 = p2.x;
    int y2 = p2.y;

    int x3 = p3.x;
    int y3 = p3.y;
    int x4 = p4.x;
    int y4 = p4.y;

    double k1, b1;
    bool k1_None = false;
    if (x2 - x1 == 0)
    {
        k1_None = true;
    }
    else
    {
        k1 = (double)(y2 - y1) / (double)(x2 - x1); //求出LineA斜率
        b1 = (double)y1 - (double)x1 * k1;
    }

    double k2, b2;
    bool k2_None = false;
    if (x4 - x3 == 0)
    {
        k2_None = true;
        b2 = 0;
    }
    else
    {
        k2 = (double)(y4 - y3) / (double)(x4 - x3); //求出LineB斜率
        b2 = (double)y3 - (double)x3 * k2;
    }

    if (k1_None) // LineA 水平
    {
        if (!k2_None) // LineB 非水平线
        {
            out.x = x1;
            out.y = k2 * x1 + b2;
            cout << "1 x=" << out.x << ", y=" << out.y;
            return true;
        }
    }
    else if (k2_None) // LineA 非水平 LineB 水平
    {
        out.x = x3;
        out.y = k1 * x3 + b1;
        cout << "2 x=" << out.x << ", y=" << out.y;
        return true;
    }
    else if (k2 != k1) // LineA 非水平 LineB 水平
    {
        out.x = (double)(b2 - b1) / (double)(k1 - k2);
        out.y = k1 * (double)out.x + b1;
        cout << "3 x=" << out.x << ", y=" << out.y;
        return true;
    }

    out.x = 0;
    out.y = 0;
    return false;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值