Как найти площадь пересечения двух прямоугольников

от admin

геометрия — Как найти площадь пересечения прямоугольников?

Есть 2 прямоугольника, как найти площадь их пересечения? Стороны прямоугольников паралельны осям.

задан 12 Янв ’12 17:00

Эта задача для какого класса?

А в чем разница?

1 ответ

Кхм. Очень просто. Пусть прямоугольник $%A$% ограничен координатами $%(X_<ЛA>, Y_<НA>, X_<ПA>, Y_<ВA>)$%, а прямоугольник $%B$% — координатами $%(X_<ЛB>, Y_<НB>, X_<ПB>, Y_<ВB>)$%, где Л — лево, П — право, Н — низ, В — верх.

Задача по Python 3.6?

На плоскости даны два прямоугольника, каждый прямоугольник задан координатами левого нижнего и правого верхнего угла. Найдите площадь пересечения этих прямоугольников.

ВХОДНЫЕ ДАННЫЕ
Программа получает на вход 8 чисел. Сначала даны координаты левого нижнего угла первого прямоугольника . Затем даны координаты правого верхнего угла первого прямоугольника . Затем аналогично даны координаты второго прямоугольника и .

Числа заданы по одному числу в строке, −10000⩽x1
ВЫХОДНЫЕ ДАННЫЕ
Программа должна выводить одно целое число – площадь пересечения данных прямоугольников.

  • Вопрос задан более трёх лет назад
  • 2357 просмотров
  • Facebook
  • Вконтакте
  • Twitter

x1=int(input())
y1=int(input())
x2=int(input())
y2=int(input())
x3=int(input())
y3=int(input())
x4=int(input())
y4=int(input())

# границы области пересечения
left = max(x1, x3) # левая
bottom = max(y1, y3) # нижняя
right = min(x2, x4) # правая
top = min(y2, y4) # верхняя

width = right — left # ширина пересечения
height = top — bottom # высота пересечения

# если ширина и высота области пересечения меньше или равны 0
if width <= 0 or height <= 0:
# то его площадь 0
—-print(0)
else:
# если больше 0, то выводим площадь
—-print(width * height)

общая площадь пересекающихся прямоугольников

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

3 ответа

Вот примерно то, что вам нужно сделать, выраженное как можно более обобщенно, но охватывающее все возможности:

  • Определите класс пересечения. т.е. Сколько ребер имеет площадь пересечения? Это может быть что угодно от 0 до 8.
  • Найдите все вершины пересечения. Это будут все пересечения между краями прямоугольников и связанные с ними углы самих прямоугольников. Работа над этим битом является самой сложной / утомительной.
  • Определите площадь пересечения, при необходимости разделив ее на треугольники.
Читать:
Movielab что за приложение

Вот все способы пересечения прямоугольников:

Обновить

У меня были некоторые мысли, и лучший способ классифицировать пересечение — это обвести периметр каждого прямоугольника и подсчитать, сколько раз каждое ребро пересекает другое ребро. Вы получите вектор, например. для шестисторонней области пересечения: <1,1,1,1>, <0,1,1,1>и для 8: <2,2,2,2>, <2,2,2,2>. Два особых случая, которые вам нужно проверить, это когда один прямоугольник полностью охватывает другой и когда края находятся на одной линии. Вам нужно будет провести тщательную проверку, но это будет отправной точкой для функции, которая классифицирует перекресток.

Русские Блоги

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

Поскольку для работы требуется программа на языке Python, занимающая область пересечения двух прямоугольников, я искал ее в Интернете в то время, либо она была в облаке, либо код не был Python. Фактически это в основном условие оценки пересечения прямоугольника. Это сложный вопрос. К счастью, я нашел два хороших блога во время поиска.

Я сделал некоторую сортировку и обобщение на основе ссылки на эти два блога и, наконец, сформировал эту статью. Спасибо блогерам за то, что поделились.

Поскольку аннотации кода более подробны, вы узнаете с первого взгляда, поэтому я не буду вдаваться в подробности здесь.

Прежде чем закончить, я расскажу о нескольких вопросах, которые наконец пришли в этот процесс. Пожалуйста, позвольте мне этот маленький белый, который только что вошел в python и matplotlib:

1. plt.close (‘all’) # Почему этот оператор не работает каждый раз, когда я запускаю программу в sublime под linux? ? ? У меня есть несколько окон после запуска несколько раз
plt.clf () # не работает? ? ?

2. Используйте следующий код, чтобы нарисовать прямоугольник, почему бы не установить координаты x, y больше 1, ось координат принимает нормализованный путь по умолчанию, нажата

Друг, который знает вышеупомянутую ситуацию, не будет благодарен за неприятности.

Похожие статьи