【问题标题】:Finding fully contained squares in a QPolygon?在 QPolygon 中找到完全包含的正方形?
【发布时间】:2012-11-05 07:56:03
【问题描述】:

我正在寻找一种方法来找到完全包含在 QPolygon 内的一组正方形,这不一定是凸的。到目前为止,我的幼稚方法如下所示:

QRectF boundingRect(mShape->boundingRect());
for (int x = boundingRect.x() - 1; x < boundingRect.width(); x++)
{
    for (int y = boundingRect.y() - 1; y < boundingRect.height(); y++)
    {
        QRectF rect(x, y, 1, 1);
        QPolygonF cell(rect);
        QPolygonF intersection = mShape->polygon().intersected(cell);
        if (!intersection.empty())
        {
            // Cell is fully contained
        }
    }
}

当我将结果可视化时,它看起来像这样:

这几乎是我想要的,除了与多边形的“轮廓”相交的单元格不应该存在。有谁知道如何构造一组完全在多边形“内部”的正方形?

【问题讨论】:

  • 不应该 cell.subtracted(mShape-&gt;polygon()); 如果完全包含则返回空多边形,如果有东西留在外面则不返回空多边形?

标签: c++ qt polygon intersection


【解决方案1】:

假设较大的多边形是凸的(在您的示例中),检查正方形的所有四个角是否都在较大的多边形内就足够了。对较大的多边形使用 containsPoint 方法。

【讨论】:

  • 啊,对不起,我忘了说多边形不一定是凸的。但是感谢您的提示,对于凸面的多边形,这可能是一个不错的加速。
  • 好的,那么也许你可以从正方形多边形中减去较大的多边形。如果结果是一个空多边形,则该正方形完全位于较大的多边形内。在这样做之前检查四个角可能也是一个好主意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多