我正在尝试计算发射弹丸以击中特定坐标所需的角度。
我的弹丸位于随机坐标,我的目标坐标位于静态坐标。
我最终在 Wikipedia 上运行了以下等式,用于计算从 (0,0) 到 (x,y) 处的坐标所需的角度:
我做了一些尝试来理解这个公式和其他公式,并尝试了以下实现(我使用的是 c# 和 XNA)。
double y = source.Y - target.Y;
double x = Vector2.Distance(source, target);
double v = 1440; //velocity
double g = 25; //gravity
double sqrt = (v*v*v*v) - (g*(g*(x*x) + 2*y*(v*v)));
sqrt = Math.Sqrt(sqrt);
double angleInRadians = Math.Atan(((v*v) + sqrt)/(g*x));
我还尝试了以下方法,这导致了相同的角度,其中 v 和 g 的值保持不变。
double targetX = target.X - source.X;
double targetY = -(target.Y - source.Y);
double r1 = Math.Sqrt((v*v*v*v) - g*(g*(target.X*target.X) + ((2*target.Y)*(v*v))));
double a1 = ((v*v) + r1)/(g*target.X);
angleInRadians = -Math.Atan(a1);
if (targetX < 0)
{
angleInRadians -= 180/180*Math.PI;
}
我的猜想是,即使在我(假设的)尝试将源坐标归零时,对于具有非(0,0)源和不同高程的坐标,我仍然没有正确执行计算。
下面是描绘我的坐标系的图像。这是 XNA 的默认设置。