Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как проверить, пересекаются ли два прямоугольника?

Александр Гуру (3871), закрыт 13 лет назад
Стороны прямоугольников параллельны осям координат. Прямоугольник определяется двумя точками, левой верхней и правой нижней: (x1,y1) и (x2,y2). Ось Ox направлена направо, ось Oy направлена вниз (как на мониторе).
Лучший ответ
Άηϑρέΰ ҂ Искусственный Интеллект (180013) 13 лет назад
Если хотя бы одна вершина прямоугольника находится в области другого то пересекаются.

p.s. а куда ось направлена - неважно
Никола ТеслаУченик (166) 3 года назад
Идиот
Остальные ответы
Jurii Высший разум (176275) 13 лет назад
Нарисуй на листочке бумаги:
- оси координат
- 2 прямоугольника, которые пересекаются (2-ой левее, правее, выше, ниже)
- прямоугольник, а в нём второй
- прямоугольники, которые не пересекаются
- обозначь на прямоугольниках точки (левую верхнюю и правую нижнюю)
И выведи нужные тебе условия!
+ случай когда координаты совпадают.
АлександрГуру (3871) 13 лет назад
Я уже так и сделал) Только без бумаги.
=Serge= Просветленный (36122) 13 лет назад
Элементарно. Вот фрагмент условий. Так как координаты уже упорядочены по возрастанию.
If b.x1 >a.x1 then
If b.x1>a.x2 then writeln("Не входит");
(иначе проверяем по y).
АлександрГуру (3871) 13 лет назад
У меня вышло вот так (при условии, что ширина и высота прямоугольника b не меньше чем i):

if ((i.x1>=b.x1) and (i.x1<=b.x2) and (i.y1>=b.y1) and (i.y1<=b.y2))
or ((i.x2>=b.x1) and (i.x2<=b.x2) and (i.y2>=b.y1) and (i.y2<=b.y2))
or ((i.x2>=b.x1) and (i.x2<=b.x2) and (i.y1>=b.y1) and (i.y1<=b.y2))
or ((i.x1>=b.x1) and (i.x1<=b.x2) and (i.y2>=b.y1) and (i.y2<=b.y2)) then
=Serge= Просветленный (36122) Ты слишком усложняешь.Не вхождение проверяется проще,как я уже писал.И без всяких дополнительных условий.
Похожие вопросы