Форум: "Прочее";
Текущий архив: 2009.07.19;
Скачать: [xml.tar.bz2];
ВнизПересечение двух прямоугольников Найти похожие ветки
← →
cyber-pilot (2009-05-19 13:00) [0]Есть два прямоугольника, нужно определить пересекаются ли они, если пересекаются, то определить координаты прямоугольника являющегося пересечением. Можно ли при решении задачи обойтись без анализа всех вариантов расположения прамоугольников. Если можно, то какой будет алгоритм?
← →
KilkennyCat © (2009-05-19 13:07) [1]
> без анализа всех вариантов
вариантов бесконечно. А вот учебник геометрии напротив.
← →
DVM © (2009-05-19 13:08) [2]Если прямоугольники заданы двумя точками, как обычно, то:
function RectIntersection(const R1, R2: TRect): TRect;
begin
with Result do
begin
if R1.Left > R2.Left then
Left := R1.Left
else
Left := R2.Left;
if R1.Top > R2.Top then
Top := R1.Top
else
Top := R2.Top;
if R1.Right < R2.Right then
Right := R1.Right
else
Right := R2.Right;
if R1.Bottom < R2.Bottom then
Bottom := R1.Bottom
else
Bottom := R2.Bottom;
end;
if not RectIsValid(Result) then
Result := NullRect;
end;
function RectIsNull(const R: TRect): Boolean;
begin
with R do
Result := (Left = 0) and (Right = 0) and (Top = 0) and (Bottom = 0);
end;
function RectIntersectRect(const R1, R2: TRect): Boolean;
begin
Result := not RectIsNull(RectIntersection(R1, R2));
end;
← →
Ega23 © (2009-05-19 13:11) [3]
> то определить координаты прямоугольника являющегося пересечением.
Это всего лишь частный случай. А в целом - от точки до восьмиугольника (неправильного).
← →
palva © (2009-05-19 13:14) [4]
> Если прямоугольники заданы двумя точками, как обычно,
Обычно прямоугольники задаются четырьмя точками. То что стороны параллельны координатным осям автор не предполагает, насколько я понял. Наверно, он предполагает, что прямоугольники располагаются в одной и той же плоскости, но это я тоже не уверен.
← →
Eraser © (2009-05-19 13:24) [5]> [0] cyber-pilot (19.05.09 13:00)
IntersectRect + F1
← →
cyber-pilot (2009-05-19 13:49) [6]
> palva © (19.05.09 13:14) [4]
Я имел в виду, что стророны прямоугольников паралельны осям координат.
Всем спасибо.
← →
DVM © (2009-05-19 13:50) [7]
> palva © (19.05.09 13:14) [4]
> Обычно прямоугольники задаются четырьмя точками. То что
> стороны параллельны координатным осям автор не предполагает,
> насколько я понял.
Тогда пересечение их будет необязательно прямоугольник, а он написал:
> то определить координаты прямоугольника являющегося пересечением.
← →
palva © (2009-05-19 13:52) [8]
> Тогда пересечение их будет необязательно прямоугольник, а он написал:
Сдаюсь.
← →
Ega23 © (2009-05-19 14:12) [9]
> Я имел в виду, что стророны прямоугольников паралельны осям
> координат.
Опять же, частный случай. Пересечением может быть и точка и отрезок.
← →
cyber-pilot (2009-05-19 15:02) [10]
> Опять же, частный случай. Пересечением может быть и точка
> и отрезок.
Будем считать, что точка и отрезок это вырожденный случай прямоугольника.
← →
pasha_golub © (2009-05-19 16:52) [11]Многа букаф
function RectIntersection(const R1, R2: TRect): TRect;
begin
with Result do
begin
Left := Max(R1.Left, R2.Left);
Top := Max(R1.Top, R2.Top);
Right := Min(R1.Right, R2.Right);
Bottom := Min(R1.Bottom, R2.Bottom);
end;
if not RectIsValid(Result) then
Result := NullRect;
end;
function RectIsNull(const R: TRect): Boolean;
begin
with R do
Result := (Left = 0) and (Right = 0) and (Top = 0) and (Bottom = 0);
end;
function RectIntersectRect(const R1, R2: TRect): Boolean;
begin
Result := not RectIsNull(RectIntersection(R1, R2));
end;
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2009.07.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c