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; //返回交集多边形列表}
欢迎交流学习!