判断两条线段是否相交(三种算法)

本文介绍了三种判断线段是否相交的算法。算法1直接计算交点并验证是否在线段内。算法2通过快速排斥试验和跨立试验确定相交。算法3提供了另一种判断方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法1:
直接计算出两直线的交点,然后判断交点是不是在线段内,代码如下

struct line
{
    double x1, y1, x2, y2;
    bool fun(line l)
    {
        double xx, yy;  //两直线的交点
        double k1, k2;  //两直线的斜率
        if (fabs(this->x1-this->x2) < 1e-7 && fabs(l.x1-l.x2) < 1e-7)   //两条直线都垂直于y轴
        {
            if (fabs(l.x1-this->x1) < 1e-7)     return true;
            return false;
        }
        else if (fabs(this->x1-this->x2) < 1e-7)    //
        {
            if ((this->x1-l.x1)*(this->x1-l.x2) > -1e-8)    return false;
            k2 = (l.y1-l.y2)/(l.x1-l.x2);
            xx = this->x1;
            yy = k2*(xx-l.x1) + l.y1;
            if ((this->y1-yy)*(yy-this->y2) >= 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值