Нахождение площади пересечения двух прямоугольников - 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);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д