Как уже упоминалось, хотя определить углы между точками относительно просто, определить, как ветер и сила тяжести будут влиять на выстрел, сложнее.
Ветер и гравитация являются ускоряющими силами, хотя они действуют несколько по-разному.
Гравитация легче, поскольку она имеет как постоянное направление (вниз), так и величину независимо от объекта. (Предполагая, что вы не снимаете вещи со смехотворно высокими скоростями). Чтобы рассчитать, как гравитация повлияет на скорость вашего объекта, просто возьмите время с момента последнего обновления скорости объекта, умножьте ее на свой гравитационный коэффициент и добавьте к текущему вектору скорости.
В качестве простого примера давайте подумаем об объекте, который движется со скоростью (3, 4, 7) в направлениях x, y, z, причем z параллельно силе гравитации. Вы решаете, что ваше значение гравитации равно -3. Вы готовы рассчитать новую скорость. Когда вы проверяете, вы обнаруживаете, что с момента вашего последнего расчета прошло 10 единиц времени (какими бы ни были ваши единицы времени ... возможно, тики или что-то в этом роде). Вы берете свои единицы времени (10), умноженные на гравитацию (-.3), что дает вам -3. Вы добавляете это к своему Z, и ваша новая скорость (3, 4, 4). Вот и все. (Это было очень упрощено, но с этого следует начать.)
Ветер немного другой, если вы хотите сделать это правильно. Если вы хотите сделать это простым и легким способом, вы можете сделать это как гравитацию ... постоянной силой в определенном направлении. Но более реалистичный способ - заставить силу зависеть от вашего текущего вектора скорости. Проще говоря: если вы движетесь точно с ветром, это не должно придавать вам никакой силы. В этом случае вы просто вычисляете величину силы как разницу между ее направлением и вашим собственным.
Простой пример этого может быть, если вы двигались в точке (3, 0, 0), а ветер двигался в точке (5, 0, 0), и мы можем придать ветру силу 0,5. (Вы также должны умножить на прошедшее время ... ради этого примера, чтобы упростить его, мы оставим коэффициент истекшего времени равным 1). Вы рассчитываете разницу в векторах и умножаете на свою разницу во времени. (1) и обнаружить, что разница составляет (2, 0, 0). Затем вы умножаете этот вектор на силу ветра, .5, и вы обнаруживаете, что ваше изменение скорости равно (1, 0, 0). Добавьте это к вашей предыдущей скорости, и вы получите (4, 0, 0) ... так что ветер немного ускорил объект. Если бы вы ждали другую единицу времени, у вас была бы разница (1, 0, 0), умноженная на вашу силу .5, поэтому ваша конечная скорость была бы (4.5, 0, 0). Как вы можете видеть, ветер создает меньше силы, когда вы приближаетесь к нему по скорости.) Это довольно аккуратно, но может быть слишком сложно для баллистики игры.