赞
踩
利用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; //返回交集多边形列表
- }
欢迎交流学习!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。