首页 > 其他分享 >Qt5.14.2 多边形与多边形求交集

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

时间:2024-08-23 12:58:04浏览次数:17  
标签:Qt5.14 多边形 plst curP 交集 列表 QPointF intersection append

利用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;  //返回交集多边形列表
    }

欢迎交流学习!

标签:Qt5.14,多边形,plst,curP,交集,列表,QPointF,intersection,append
From: https://blog.csdn.net/u010350136/article/details/141461999

相关文章

  • qt5.14.2 MSVC opencv(不结合vs)路径添加问题 测试通过
     不换行写法1win32:CONFIG(release,debug|release):LIBS+=-LG:/opencv4.4.0/opencv4.4_vs_msvc19_qt6.5/x64/vc17/lib/-lopencv_aruco440-lopencv_bgsegm440-lopencv_bioinspired440-lopencv_calib3d440-lopencv_ccalib440-lopencv_core440-lopencv_cvv440-lopen......
  • Qt5.14.2 MinGW7.3.0_64 opencv helloworld
    路径配置.proINCLUDEPATH+=E:\Opencv\includeLIBS+=E:\Opencv\x64\mingw\lib\libopencv_*.a 点击按钮打开一张图片1#include"mainwindow.h"2#include"ui_mainwindow.h"3#include<QFileDialog>4#include<QMessageBox>5......
  • 用GDI+旋转多边形来绘制一个时钟摸拟小程序
    效果图 在头文件类中声明变量TCHARm_dayStr[4];//日期TCHARm_weekStr[4];//星期Gdiplus::Font*m_pFont;//字体Gdiplus::StringFormatm_strFormat;//格式化字符串Gdiplus::Pen*m_pPen;//画笔Gdiplus::So......
  • day6 哈希表part01: 242.有效的字母异位词|349. 两个数组的交集|202. 快乐数|1. 两数
    242.有效的字母异位词 classSolution{publicbooleanisAnagram(Strings,Stringt){int[]record=newint[26];//a=97.soa-a=0,b-a=1.直接使用减法,不用记acii码值。//遍历第一个string++,遍历第二个string--.数组里的数字......
  • 只用一个 HTML 元素可以写出多少形状?——多边形篇
    上一篇章的末尾,我们只用一个 div 元素写了一个鸡蛋,在欧几里得平面几何中,鸡蛋的形状已经不能算是标准形状了。对于非标准的形状,没有比较直观的几何规律,命名方面也更加困难,俗称不规则图形,在欧几里得平面几何中,将其统称为多边形。在平行四边形篇中,我们首先使用常规的盒模型写出......
  • 代码随想录算法训练营day06|242.有效的字母异位词,349.两个数组的交集,202.快乐数,1.两数
    242.有效的字母异位词题目链接:https://leetcode.cn/problems/valid-anagram/description/我的代码:classSolution{public:boolisAnagram(strings,stringt){if(s.size()==t.size()){intrecord[26]={0};for(inti=0;i......
  • 凸多边形 k 划分计数
    凸多边形k划分计数给定\(n,k\),求凸\(n\)边形划分成\(k\)个不相交部分的方案数。sol先引入一个定理:Raney定理:和为\(1\)的整数序列的所有循环位移序列中有且仅有一个满足任意前缀和大于0。证明可以考虑任取一个循环位移序列,然后求前缀和,找到最靠右的前缀和最小的位......
  • 两个数组的交集
    使用数据结构Set我们定义一个Set集合,先去遍历数组nums1, 让其内部所有元素都存储到这个set集合中,然后再去遍历nums2,如果nums2中的元素在set集合中包含了,则说明这是两个数组都有的importjava.util.*;classSolution{publicint[]intersection(int[]nums1,int[]nums2)......
  • 如何在Python中平滑相邻的多边形?
    我正在寻找一种平滑多边形的方法,以便相邻/接触的多边形保持接触。单个多边形可以轻松平滑,例如使用PAEK或Bezier插值(https://pro.arcgis.com/en/pro-app/latest/tool-reference/cartography/smooth-polygon.htm),这自然会改变它们的边界边缘。但是如何平滑所有多边形......
  • 如何找到可以包围多边形的最小圆?
    使用python,如何找到可以包围多边形的最小圆?多边形被定义为映射2D平面内顶点的一组坐标。要求:输入|||:表示多边形顶点坐标的元组列表。例如:[(x1,y1),(x2,y2),...,(xn,yn)].输出:包含最小外接圆圆心及其坐标的元组半径。例如:((x_center,......