Формула расчёта угла для точного запуска снаряда
Есть код, который вычисляет угол запуска снаряда, с учётом следующих данных: скорость, гравитация, разница в расстоянии по Y и XZ
public static double getAngle(double xzDistance, double yDiff, double velocity, double gravity) {
double result = velocity * velocity * velocity * velocity - gravity * (gravity * xzDistance * xzDistance + 2.0 * yDiff * velocity * velocity);
if (result < 0.0) {
return -1;
}
result = Math.sqrt(result);
return Math.atan((velocity * velocity + result) / (gravity * xzDistance));
}
И проблема в чём, при больших расстояниях попадание снаряда не точное. Покопав в исходниках игры, там оказалось, что снаряд имеет отрицательное ускорение в 0.98 (каждый тик умножается значение скорости (вектор) на *= 0.98, пока на скорость снаряда не будет действовать только гравитация (при этом, скорость падения также снижается, но только на 0.98, держа стабильную скорость)). И в формуле как раз не хватает отрицательного ускорения, с математикой довольно плохо дружу, чтобы довести формулу до конца и где не хватает последнего вычисления.