Я ищу подход, чтобы найти набор квадратов, которые полностью содержатся внутри 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
}
}
}
Когда я визуализирую результат, он выглядит так:
Это почти то, что я хочу, за исключением того, что там не должно быть ячеек, пересекающихся с «контуром» многоугольника. У кого-нибудь есть хорошая идея, как я мог бы построить набор квадратов, которые полностью «внутри» многоугольника?
Предполагая, что большой многоугольник является выпуклым (это в вашем примере), должно быть достаточно проверить, что все четыре угла вашего квадрата находятся внутри большего многоугольника. Используйте метод containsPoint для большего многоугольника.
Других решений пока нет …