Здравствуйте, 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-го. Ну и т.д.