Как вычислить процент перекрытия двух прямоугольников?
Я написал функцию рисования, которая рисует на экране спрайтов. Эти спрайты могут перекрываться только до определенной точки. Если им приходится часто пересекаться, они становятся слишком неясными. В результате мне нужно определить, когда эти спрайты слишком сильно перекрываются. К счастью, проблема упрощается тем, что спрайты можно рассматривать как ортогональные прямоугольники. Я хотел бы знать, насколько эти прямоугольники перекрываются. Прямо сейчас, я просто грубой силы, проверяя каждый пиксель в одном прямоугольнике, чтобы увидеть, если другой содержать его. Я подсчитываю их и вычисляю процент перекрытия. Я думаю, что, вероятно, есть лучший, менее грубый подход. Какой алгоритм я могу использовать для определения этого?
Я использую 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());
}