Два прямоугольника на плоскости со сторонами, параллельными осям координат, заданы координатами левой верхней вершины и нижней правой вершины. Как определить площадь их общей части?

задан 9 Апр '17 13:36

10|600 символов нужно символов осталось
0

Сначала решим задачу для одномерного случая. Пусть даны отрезки $%[a,b]$% и $%[c,d]$%. Найдём длину их общей части. Полезно нарисовать несколько картинок, различая отдельные случаи.

1) Один из отрезков лежит правее другого. В этом случае отрезки либо не пересекаются, либо пересекаются по точке. Длина их общей части равна нулю. Этому случаю соответствуют неравенства $%b\le c$% или $%d\le a$% (совокупность).

2) Один из отрезков содержится в другом. Неравенства: $%a\le c < d\le b$% или $%c\le a < b\le d$%. Длина общей части равна $%d-c$% или $%b-a$% соответственно.

3) Отрезки перекрываются: $%a < c < b < d$% или $%c < a < d < b$%. Общая часть имеет длину $%b-c$% или $%d-a$% соответственно.

Теперь рассматриваем двумерный случай. Если у прямоугольника левая верхняя вершина $%(x,y)$%, а правая нижняя $%(z,t)$%, то он равен $%[x,z]\times[y,t]$%. Если даны два таких прямоугольника вида $%[x_i,z_i]\times[y_i,t_i]$%, где $%i=1,2$%, то в пересечении получится множество $%([x_1,z_1]\cap[x_2,z_2])\times([y_1,t_1]\cap[y_2,t_2])$%. Для одномерного случая мы всё уже умеем выяснять, и остаётся перемножить два измерения.

ссылка

отвечен 9 Апр '17 20:28

От перебора случаев спасает функция max и min. Для одномерного случая - min(b,d)-max(a,c).

(9 Апр '17 21:09) knop

@knop: я дал общую картину, и сознательно не стал упоминать про min и max (хотя изначально такое намерение было). Способ конкретной реализации системы логических условий -- вещь уже в значительной мере техническая. Сходу не очень понятно, в каком виде это всё проще реализовать программно. В Maple я бы использовал условные операторы с участием elif.

(9 Апр '17 21:20) falcao
1

min-max может давать отрицательное значение. Наверное, надо брать его максимум с нулём -- тогда получится готовая формула.

(9 Апр '17 21:22) falcao
10|600 символов нужно символов осталось
Ваш ответ

Если вы не нашли ответ, задайте вопрос.

Здравствуйте

Математика - это совместно редактируемый форум вопросов и ответов для начинающих и опытных математиков, с особенным акцентом на компьютерные науки.

Присоединяйтесь!

отмечен:

×2,900

задан
9 Апр '17 13:36

показан
3072 раза

обновлен
9 Апр '17 21:22

Отслеживать вопрос

по почте:

Зарегистрировавшись, вы сможете подписаться на любые обновления

по RSS:

Ответы

Ответы и Комментарии

Дизайн сайта/логотип © «Сеть Знаний». Контент распространяется под лицензией cc by-sa 3.0 с обязательным указанием авторства.
Рейтинг@Mail.ru