Edit:Нахождение перекрытия площадь двух прямоугольников (в C#)
Простой код, который я использовал, чтобы решить проблему в случае, если кто-либо заинтересован (спасибо Fredrik):
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() Я думал об использовании теста отделяющей оси, но если прямоугольники имеют только горизонтальные и вертикальные линии, есть еще проще (быстрее) способ проверить?
И для расчета области, где они пересекаются, есть быстрый способ сделать это, если прямоугольники только горизонтальные и вертикальные линии?
И, наконец, это не связано с вопросом, но я был бы признателен за любые советы, которые кто-то может иметь на хорошей книге/веб-странице, где я мог бы рассмотреть математику для компьютерной графики. Некоторое время я отсутствовал в колледже и чувствую, что забываю все :)! У кого-нибудь еще есть эта проблема?
(Примечание: Я нашел этот вопрос иначе, чем this, который кажется более сложным и не сразу ответить на этот вопрос.)
горизонтальный прямоугольник представляет собой вертикальный прямоугольник, зависит, какая сторона вы считаете вершину. –
** если (перекрытие.IsEmpty) ** должно быть ** если (! перекрытие.IsEmpty) ** – ReinierDG