Толкая космический корабль вокруг

У меня есть космический корабль с двумя двигателями на его базе, один слева и один справа.

Когда правый двигатель включен, он должен толкать космический корабль по параболической кривой влево, поскольку он ускоряется. и реверс для левого подруливающего устройства.

Как мне это реализовать?

Я нашел что-то под названием «радианский импульс» на box2d, подойдет ли это?

Я также хотел бы, чтобы физика немного реверсировала правую тягу (немного похоже на одну из тех дешевых радиоуправляемых машин с одной кнопкой), но только если другой двигатель использовался в течение определенного периода времени до этого.

Достаточно рабочего примера (или чего-то, указывающего в правильном направлении) с любой библиотекой.


person Joseph Le Brech    schedule 22.02.2012    source источник
comment
почему он движется по параболе? из-за гравитации?   -  person Tom Whittock    schedule 22.02.2012
comment
из-за силы левой или правой ракеты   -  person Joseph Le Brech    schedule 23.02.2012
comment
единственная сила, действующая сама по себе, двигала бы корабль по прямой. это второй закон ньютона. возможно, корабль уже имел скорость? если это так, просто приложите силы левого и правого подруливающих устройств под противоположными углами - возможно, на 15 градусов от перпендикуляра.   -  person Tom Whittock    schedule 23.02.2012
comment
Да, это будет добавление импульса. да, угловой импульс может работать.   -  person Joseph Le Brech    schedule 23.02.2012


Ответы (1)


Когда у вас ракеты смещены от центра и только одна стреляет, вы даете своему кораблю крутящий момент. Чтобы смоделировать это, вам нужно будет разделить тягу вашей ракеты на две составляющие. Первый толкает ваш корабль вперед (в том направлении, в котором он смотрит), второй увеличивает скорость вращения. Пример:

pos_x,pos_y - position
vel_x,vel_y - velocity
angle - angle where ship is facing in deg
angle_vel - speed of rotation in deg/s
thrust - how much to add to speed
torque - how much to add to angle
thruster_left, thruster_right - boolean, true if left or right truster is firing

function love.update(dt)
    if thruster_left then
        angle_vel=angle_vel+dt*torque
    end
    if thruster_right then
        angle_vel=angle_vel-dt*torque
    end
    angle=angle+angle_vel
    vel_x=vel_x+thrust*math.sin(math.rad(angle))*dt
    vel_y=vel_y-thrust*math.cos(math.rad(angle))*dt
    pos_x=pos_x+vel_x*dt
    pos_y=pos_y+vel_y*dt
end
person yetihehe    schedule 14.12.2014