Формула 3D Target Leading для баллистической траектории - PullRequest
1 голос
/ 23 января 2012

Мне было интересно, была ли целевая формула для цели для цели в 3d с баллистической траекторией, и если нет, я задавалась вопросом, можно ли преобразовать 2-ю целевую формулу для цели, чтобы она работала как трехмерная целевая формула путем выравнивания плоскость, на которой он движется вдоль движения цели?

1 Ответ

2 голосов
/ 23 января 2012

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

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

Это рассчитает пройденное расстояние с течением времени при постоянном ускорении. В этом случае constantAccel - это скорость, и если ваша цель не ускоряется, вы просто используете 0.0f для этого параметра.

float CalcDistanceOverTime(const float initVelocity, 
                           const float constantAccel,
                           const float timeDelta)
{
    return  (initVelocity * timeDelta)
          + (0.5f * constantAccel * (timeDelta * timeDelta);
}

Вот пример:

Vector3 targetsVelocity(3.0f, 0.0f, 3.0f);
float targetsAcceleration = 1.0f;

float distanceTraveled = CalcDistanceOverTime(targetsVelocity, targetsAcceleration, timeDelta)

Vector3 finalPosition = targetsVelocity * distanceTraveled;

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

Если описанный выше метод неосуществим, вы можете выбрать фиксированную timeDelta, если вы можете гарантировать, что ваш снаряд будет двигаться под любым углом и скоростью, которые вы пожелаете. Например, выберите 3 секунды в качестве timeDelta, вы знаете, где будет цель через 3 секунды, и сразу же выстрелите из снаряда, который, как вы знаете, достигнет этой точки в космосе в течение 3 секунд.

И на всякий случай, вот сообщение в блоге о расчете баллистической траектории в 3D. Вычисление времени до цели с помощью этого метода должно быть простым, основываясь на исходящей вертикальной скорости и положении, просто используйте гравитацию, чтобы вычислить, сколько секунд до того, как это положение достигнет отметки в целевой позиции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...