如何计算两个矩形的重叠百分比?

时间:2009-09-17 19:52:04

标签: c++ algorithm math wxwidgets

我写了一个绘图功能,可以绘制各种屏幕上的精灵。这些精灵只能重叠到一个点。如果它们有很多重叠,它们会变得太模糊。因此,我需要检测这些精灵何时重叠太多。幸运的是,问题被简化,因为精灵可以被视为正交矩形。我想知道这些矩形重叠多少。现在,我只是通过测试一个矩形中的每个像素来强制它,以查看另一个矩形是否包含它。我计算这些并计算重叠百分比。我认为这可能是一种更好,更少蛮力的方法。我可以用什么算法来确定这个?

我正在使用wxwidgets。

1 个答案:

答案 0 :(得分:9)

结果取决于你如何定义重叠百分比,保持对称,我会像这样编码:

double CalculatePercentOverlap(const wxRect& rect1, const wxRect& rect2)
{
  wxRect inter = rect1.Intersect(rect2);
  if (inter.IsEmpty())
    return 0;
  return (double)(inter.GetWidth()*inter.GetHeight()) * 2.0 /
    (double)(rect1.GetWidth()*rect1.GetHeight() + 
             rect2.GetWidth()*rect2.GetHeight());
}