RecalcBounds
函数的作用是计算给定点集的边界矩形。这个函数接受一个 QPolygonF
类型的点集,并根据这些点来计算最小包围矩形。
常用于图形处理、碰撞检测和布局计算等场景,在这些应用中需要根据多个点确定一个最小的矩形框来包围这些点。
// 静态函数,重新计算点集的边界矩形
static
QRectF RecalcBounds(const QPolygonF& pts)
{
// 以第一个点为初始边界,后面不断地更新,最终找到真正的边界点。
QRectF bounds(pts[0], QSize(0, 0));
// 遍历所有点
for (int i = 1; i < pts.count(); ++i)
{
if (pts[i].x() < bounds.left()) // 更新左边界
bounds.setLeft(pts[i].x());
if (pts[i].x() > bounds.right()) // 更新右边界
bounds.setRight(pts[i].x());
if (pts[i].y() < bounds.top()) // 更新上边界
bounds.setTop(pts[i].y());
if (pts[i].y() > bounds.bottom()) // 更新下边界
bounds.setBottom (pts[i].y());
}
// 确保矩形的表示形式统一,即总是左上角的坐标最小,宽度和高度为正值。
bounds = bounds.normalized(); // 将边界标准化
return bounds;
}