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

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

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

3.5 4 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии