Qt5.14.2 多边形与多边形求交集

利用Qt5.14.2 中自带的QPolygonF类的intersected()函数求两个多边形的交集多边形。

inline QList<QPolygonF> getPolygonIntersectedWithPolygon(QPolygonF polygon1, QPolygonF polygon2){
        QList<QPolygonF> outval;
        //此处求出的intersection可能包含多个子区域,需要进一步处理
        QPolygonF intersection = polygon1.intersected(polygon2);
        //交集点数量
        int pCount = intersection.count();
        if(pCount == 0) return outval;  //如果没有交集,返回一个空列表
        QVector<QPointF> plst;  //子区域点列表
        QPointF curP = (QPointF)intersection.at(0); //首点
        plst.append(curP);
        //搜索小块分区
        for(int j = 1; j < pCount; j++){
            QPointF tp = (QPointF)intersection.at(j);
            if(curP == tp){
                //首尾点一致,则说明一个子区域搜索完毕
                plst.append(tp);
                //有时会出现第二个点与倒数第2个点相同,此时可以去掉首尾点
                while(plst.count() >= 4
                      && (plst[1] == plst[plst.count() - 2])){
                    plst.removeFirst();
                    plst.removeLast();
                    qDebug() << "去掉多余点";
                }
                //创建当前子区域的多边形
                QPolygonF _poly(plst);
                if(plst.count() > 2){
                    outval.append(_poly);
                }
                plst.clear();   //清空子区域列表
                if(j < pCount - 1){
                    //将下一个点设置为首点
                    curP = (QPointF)intersection.at(j + 1);
                    plst.append(curP);  //将下一个点加入列表
                    j++;
                }
                continue;
            }
            else{
                plst.append(tp);    //当前点加入列表
            }
        }
        return outval;  //返回交集多边形列表
    }

欢迎交流学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值