Нахождение площади пересечения двух прямоугольников - C#
Формулировка задачи:
Заранее извиняюсь за казалось бы абсурдный вопрос, но к сожалению ничего вменяемого нагуглить для Шарпа не смог. Два прямоугольника, стороны параллельны осям координат. Есть координаты верхней левой вершины прямоугольника, есть ширина, высота, есть свойства Bottom = Top + Height, есть свойство Right = Left + Width. Библиотечные ф-ии использовать нельзя кроме Math.Min() и Math.Max(). Попытался сам все расчертить. Вроде проанализировал для одного случая выдает правильно, для других случаев чеккер выдает ошибку. Заранее спасибо если поможете.
Вот мой код:
public static int IntersectionSquare(Rectangle r1, Rectangle r2)
{
int square;
if (AreIntersected(r1, r2))// метод проверяющий пересекаются или нет прямоугольники
if (r1.Right >= r2.Right || r1.Bottom >= r2.Bottom)
return square = (r1.Right + r2.Width - r2.Right) * (r1.Bottom + r2.Height - r2.Bottom);
else if(r1.Right <= r2.Right || r1.Bottom <= r2.Bottom)
return square = (r1.Right + r2.Width - r1.Right) * (r1.Bottom + r2.Height - r1.Bottom);
return 0;
}Решение задачи: «Нахождение площади пересечения двух прямоугольников»
textual
Листинг программы
int GetRectanglesIntersectionSquare(Rectangle a, Rectangle b)
{
int xIntersection = GetSegmentsIntersectionLength(a.Left, a.Right, b.Left, b.Right);
int yIntersection = GetSegmentsIntersectionLength(a.Top, a.Bottom, b.Top, b.Bottom);
return xIntersection * yIntersection;
}
int GetSegmentsIntersectionLength(int aLeft, int aRight, int bLeft, int bRight)
{
int left = Math.Max(aLeft, bLeft);
int right = Math.Min(aRight, bRight);
return Math.Max(right - left, 0);
}