利用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