Edit:
Простой код, который я использовал для решения проблемы на тот случай, если кому-то интересно (спасибо Фредрику):
int windowOverlap(Rectangle rect1, Rectangle rect2)
{
if (rect1.IntersectsWith(rect2))
{
Rectangle overlap = Rectangle.Intersect(rect1, rect2);
if (overlap.IsEmpty)
return overlap.Width * overlap.Height;
}
return 0;
}
Оригинальный вопрос:
Я хотел бы знать быстрый и грязный способ проверить, перекрываются ли два прямоугольника и рассчитывают ли они площадь перекрытия. Ради интереса меня интересует случай, когда 1) все линии в обоих прямоугольниках либо вертикальные, либо горизонтальные, либо 2) общий случай для любых двух прямоугольников, но единственный ответ, который мне действительно нужен, это случай 1.
Я думаю о том, чтобы:
double areaOfOverlap( Rect A, Rect B)
{
if ( A.Intersects(B) )
{
// calculate area
// return area
}
return 0;
}
Для A.Intersects () я думал об использовании теста разделительной оси, но если у прямоугольников есть только горизонтальные и вертикальные линии, есть ли еще более простой (более быстрый) способ проверки?
А для расчета площади, где они пересекаются, есть ли быстрый способ сделать это, если прямоугольники только горизонтальные и вертикальные линии?
Наконец, это не связано с вопросом, но я был бы признателен за любой совет, который кто-то может дать на хорошей книге / веб-странице, где я мог бы просмотреть математику для компьютерной графики. Я некоторое время не учился в колледже и чувствую, что все забываю :)! У кого-нибудь еще есть такая проблема?
(ПРИМЕЧАНИЕ: я обнаружил, что этот вопрос отличается от этого , который кажется более сложным и не дает прямого ответа на вопрос.)