Re[6]: Два прямоугольника
От: vadimcher  
Дата: 16.03.09 21:07
Оценка:
Здравствуйте, inok-etude, Вы писали:

IE>Здравствуйте, vadimcher, Вы писали:


V>>Ну и?


IE>Я не смог решить эту задачу




В том алгоритме, что я написал, стоять должен на месте всегда "правый" прямоугольник, т.е. тот, у которого x не меньше. Но это сути не меняет. Можно и так, как на картинке. Тогда левый-верхний стоит на месте, правый-нижний "пытается врезаться" со скоростью V1-V2. В случае, когда мы останавливаем тот, у которого координата x1 меньше, второй может въехать в него только снизу, справа или сверху (зависит от направления его движения, а также можно еще добавить анализ начальных координат). В твоем случае (я по-прежнему предполагаю, что ось y направлена вниз):
V=V1-V2=(Vx,Vy), причем Vx<0, Vy<0, т.е. въехать он может только снизу или справа. Если въезжает снизу, то это происходит через время t такое, что y1+Vy*t=y2+H2, т.е. t=(y2+H2-y1)/Vy. Здесь проверяешь, что t>=0, другими словами это то же самое, что проверить, что y1>=y2+H2, т.е. что первый изначально ниже второго. Если это так, то через это время левая сторона: x1+(y2+H2-y1)*Vx/Vy, правая: x1+(y2+H2-y1)*Vx/Vy+H1. Тебе надо x1+(y2+H2-y1)*Vx/Vy <= x2+H2, x1+(y2+H2-y1)*Vx/Vy+H1 >= x2, т.е. 0 <= x1-x2+H1+(y2+H2-y1)*Vx/Vy <= H1+H2. С правой стороной аналогично.

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

А вот зайца кому, зайца-выбегайца?!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.