Редактировать:
Простой код, который я использовал для решения проблемы, если кому-то интересно (спасибо Фредрику):
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 () я думал об использовании теста разделяющей оси, но если прямоугольники имеют только горизонтальные и вертикальные линии, есть ли еще более простой (более быстрый) способ проверки?
А для расчета площади их пересечения есть ли быстрый способ сделать это, если прямоугольники представляют собой только горизонтальные и вертикальные линии?
Наконец, это не связано с вопросом, но я был бы признателен за любой совет, который может быть у кого-то на хорошей книге / веб-странице, где я мог бы просмотреть математику для компьютерной графики. Я давно не учился в колледже и чувствую, что все забываю :)! У кого-нибудь еще есть такая проблема?
(ПРИМЕЧАНИЕ: я обнаружил, что этот вопрос отличается от этого, что кажется более сложным и не дает прямого ответа на вопрос.)