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

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

  • автор:

aGGa7 / Rectangles

Save aGGa7/545092de52ccfe1f5b155e78f04d2c05 to your computer and use it in GitHub Desktop.

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

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

using System;
namespace Rectangles
public static class RectanglesTask
// Пересекаются ли два прямоугольника (пересечение только по границе также считается пересечением)
// работает от обратного, если значения стороны одного прямоугольник больше чем значение прямо противоположной стороны другого прямоугольника
// значит они не пересекаются.
public static bool AreIntersected(Rectangle r1, Rectangle r2) => r1.Top > r2.Bottom || r1.Left > r2.Right || r2.Top > r1.Bottom || r2.Left > r1.Right ? false : true;
// Площадь пересечения прямоугольников
// решение почерпнуто из https://ru.stackoverflow.com/questions/758529
// вкратце: по оси Х: берется наибольшое значение от левой точки двух прямоугольников,
// берется наименьшее значение от правой точки двух прямоугольников, из правой точки вычитаем левую и если это значение больше 0
// прямоугольники пересекаются, и эта вычисленная величина равно длинне необходимой площади пересечения. По оси У аналогично.
public static int IntersectionSquare(Rectangle r1, Rectangle r2)
int leftIntersection = Math.Max(r1.Left, r2.Left);
int topIntersection = Math.Min(r1.Bottom, r2.Bottom);
int rightIntersction = Math.Min(r1.Right, r2.Right);
int bottonIntersection = Math.Max(r1.Top, r2.Top);
int widhtIntersection = rightIntersction — leftIntersection;
int heightIntersection = topIntersection — bottonIntersection;
if (widhtIntersection < 0 || heightIntersection < 0)
return 0;
else return widhtIntersection * heightIntersection;
>
// Если один из прямоугольников целиком находится внутри другого — вернуть номер (с нуля) внутреннего.
// Иначе вернуть -1
// Первый прямоугольник находится во втором, если во втором находятся две противоположные вершины (по диагонали) первого, для другого прямоугольника все тоже самое но наоборот.
public static int IndexOfInnerRectangle(Rectangle r1, Rectangle r2) => r1.Left = r1.Top && r2.Bottom = r2.Top && r1.Bottom
>
>

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

Delphi в Internet

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

Бывает возникнет какая-нибудь простенькая задачка, наподобие заявленной в теме поста, а ты сидишь и тупишь в монитор полдня. Вот для таких случаев я, в свое время, и заводил блог — чтобы при необходимости можно было достаточно быстро найти ответ на вопрос, который ранее решался. Итак, исходные условия задачи: есть два прямоугольника со сторонами параллельными осям координат. Необходимо найти площадь пересечения этих прямоугольников, используя возможности Delphi.

Задача решается также просто, как и звучит. Графически задача выглядит следующим образом:

Нам необходимо найти площадь заштрихованной области. Для решения задачи необходимо знать координаты четырех точек:

  1. (X1, Y1) — координаты нижнего левого угла первого прямоугольника
  2. (X2, Y2) — координаты верхнего правого угла первого прямоугольника
  3. (X3, Y3) — координаты нижнего левого угла второго прямоугольника
  4. (X4, Y4) — координаты верхнего правого угла второго прямоугольника

Графически, условия задачи будут выглядеть так:

Вычисления будут такими (подробно):

uses Math, System.Types; function Intersection(P1, P2, P3, P4: TPointF): double; // P1 - (X1, Y1) - координаты нижнего левого угла первого прямоугольника // P2 - (X2, Y2) - координаты верхнего правого угла первого прямоугольника // P3 - (X3, Y3) - координаты нижнего левого угла второго прямоугольника // P4 - (X4, Y4) - координаты верхнего правого угла второго прямоугольника var Left, Top, Right, Bottom: double; Width, Height: double; begin Left:=Max(P1.X,P3.X); Top:=Min(P2.Y, P4.Y); Right:=Min(P2.X, P4.X); Bottom:=Max(P1.Y, P3.Y); Width:=Right-Left; Height:=Top-Bottom; if (Width<;=0) or (Height<;=0) then raise Exception.Create('Прямоугольники не пересекаются'); Result:=Width*Height; end;

Если прямоугольники не пересекаются, то функция выдаст исключение «Прямоугольники не пересекаются», иначе — площадь пересечения двух прямоугольников.

Алгоритм нахождения площади пересечения

Вот задача, но мне не нужен код, помогите с алгоритмом нахождения площади пересечения.

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

Ваша программа должна вводить с клавиатуры числа x1, y1, x2, y2, x3, y3, x4, y4. Числа xi, yi будут вводиться в i-строке (1≤i≤4) и разделяться одним пробелом. Точки (x1, y1) и (x2, y2) – координаты двух противоположных углов первого прямоугольника. Точки (x3, y3) и (x4, y4) – координаты двух противоположных углов второго прямоугольника.

Числа xi, yi – целые; 0≤xi, yi≤30000; оба прямоугольника имеют ненулевую площадь.

Ваша программа должна вывести на экран одно число S – площадь общей части двух введенных прямоугольников. Если введенные прямоугольники не имеют общих точек, то ваша программа должна вывести на экран число 0.

Голосование за лучший ответ

собственно, всё сводится к нахождению пересечений отрезков (x1, x2) ∩ (x3, x4) и отрезков (y1,y2) ∩ (y3, y4)

а пересечение отрезков (a, b)∩(c, d) посчитать легко: это (max(a,c), min(b,d)).
если max(a,c) > min(b,d), то пересечение пустое

так что программа простая:

1) приводишь прямоугольники (xi, yi) — (xj, yj) к «нормальному» виду
xi < xj, yi < yj

2) находишь пересечения отрезков
(x1, x2) ∩ (x3, x4) = (xA, xB)
(y1, y2) ∩ (y3, y4) = (yA, yB)

3) если пересечения не пустые, считаешь площадь прямоугольника (xA, yA) — (xB, yB)

Задача по Python 3.6?

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

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

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

  • Вопрос задан более трёх лет назад
  • 3269 просмотров

Комментировать
Решения вопроса 1
ban_by_fb @ban_by_fb Автор вопроса

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
—-print(0)
else:
# если больше 0, то выводим площадь
—-print(width * height)

вместо — ставить пробелы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *