Как вычислить процент перекрытия двух прямоугольников?

Я написал функцию рисования, которая рисует на экране спрайтов. Эти спрайты могут перекрываться только до определенной точки. Если им приходится часто пересекаться, они становятся слишком неясными. В результате мне нужно определить, когда эти спрайты слишком сильно перекрываются. К счастью, проблема упрощается тем, что спрайты можно рассматривать как ортогональные прямоугольники. Я хотел бы знать, насколько эти прямоугольники перекрываются. Прямо сейчас, я просто грубой силы, проверяя каждый пиксель в одном прямоугольнике, чтобы увидеть, если другой содержать его. Я подсчитываю их и вычисляю процент перекрытия. Я думаю, что, вероятно, есть лучший, менее грубый подход. Какой алгоритм я могу использовать для определения этого?

Я использую wxwidgets.

1 ответов


результаты зависят от того, как вы определяете процент перекрытия, чтобы сохранить его симметричным, я бы закодировал его следующим образом:

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());
}