当前位置:   article > 正文

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

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

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

  1. inline QList<QPolygonF> getPolygonIntersectedWithPolygon(QPolygonF polygon1, QPolygonF polygon2){
  2. QList<QPolygonF> outval;
  3. //此处求出的intersection可能包含多个子区域,需要进一步处理
  4. QPolygonF intersection = polygon1.intersected(polygon2);
  5. //交集点数量
  6. int pCount = intersection.count();
  7. if(pCount == 0) return outval; //如果没有交集,返回一个空列表
  8. QVector<QPointF> plst; //子区域点列表
  9. QPointF curP = (QPointF)intersection.at(0); //首点
  10. plst.append(curP);
  11. //搜索小块分区
  12. for(int j = 1; j < pCount; j++){
  13. QPointF tp = (QPointF)intersection.at(j);
  14. if(curP == tp){
  15. //首尾点一致,则说明一个子区域搜索完毕
  16. plst.append(tp);
  17. //有时会出现第二个点与倒数第2个点相同,此时可以去掉首尾点
  18. while(plst.count() >= 4
  19. && (plst[1] == plst[plst.count() - 2])){
  20. plst.removeFirst();
  21. plst.removeLast();
  22. qDebug() << "去掉多余点";
  23. }
  24. //创建当前子区域的多边形
  25. QPolygonF _poly(plst);
  26. if(plst.count() > 2){
  27. outval.append(_poly);
  28. }
  29. plst.clear(); //清空子区域列表
  30. if(j < pCount - 1){
  31. //将下一个点设置为首点
  32. curP = (QPointF)intersection.at(j + 1);
  33. plst.append(curP); //将下一个点加入列表
  34. j++;
  35. }
  36. continue;
  37. }
  38. else{
  39. plst.append(tp); //当前点加入列表
  40. }
  41. }
  42. return outval; //返回交集多边形列表
  43. }

欢迎交流学习!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/1021387
推荐阅读
相关标签
  

闽ICP备14008679号