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