Нахождение области перекрытия двух прямоугольников (в C#)
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 () я думал использовать тест разделяющей оси, но если прямоугольники имеют только горизонтальные и вертикальные линии, есть ли еще более простой (быстрый) способ проверить?
и для вычисления площади, где они пересекаются есть ли быстрый способ сделать это, если прямоугольники только горизонтальные и вертикальные линии?
наконец, это не связано с вопрос, но я был бы признателен за любой совет, который может быть у кого-то на хорошей книге / веб-странице, где я мог бы просмотреть математику для компьютерной графики. Я некоторое время не учился в колледже и чувствую, что забываю все :)! У кого еще есть эта проблема?
( примечание: Я нашел этот вопрос иначе, чем этой что кажется более сложным и непосредственно не отвечает на вопрос. )
2 ответов
может быть, я неправильно понимаю ваш вопрос, но не Rectangle.Intersect
метод делает работу? Он возвращает пересекающуюся область, а затем вы можете легко вычислить ее площадь.
звучит как основное обнаружение столкновения. Вы смотрели на эта страница в Википедии?
Майк
edit: Фредрик делает свой ответ в то же время, когда я сделал это, его ответ получил мой upvote (: