gar*_*uan 0 physics artificial-intelligence game-physics
我需要实现一点AI来弄清楚如何用射弹运动击中目标.
我在维基百科发现了这个:
这看起来就像我需要的东西,特别是因为我有一个额外的问题从零高度发射射弹.但是,我的数学技能并不是很好,所以对我来说这一切看起来都是完全无稽之谈,我不知道如何将其中任何一个转换为代码.
如果有人可以把它分解成我能用基本操作符(+ - *%)和函数(sin,cos,sqrt等)理解的东西,我真的很感激.
如果xTarget/yTarget是目标xProj/yProj的位置,射弹的初始位置和射弹v的初始速度(以米/秒为单位),则公式将转换为以下伪代码:
x = xTarget - xProj;
y = yTarget - yProj;
g = 9.8;
tmp = pow(v, 4) - g * (g * pow(x, 2) + 2 * y * pow(v, 2));
if tmp < 0
// no solution
else if x == 0
angle1 = pi/2;
if y < 0
angle2 = -pi/2;
else
angle2 = pi/2;
end
else
angle1 = atan((pow(v, 2) + sqrt(tmp)) / (g * x));
angle2 = atan((pow(v, 2) - sqrt(tmp)) / (g * x));
end
Run Code Online (Sandbox Code Playgroud)
g是重力常数(~9.8 m/s ^ 2),atan是反正弦函数,pow是幂函数.if语句是必要的,因为公式可以没有解决方案(如果目标不能以初始速度到达),一个解决方案(然后angle1 == angle2)或两个解决方案(如本动画中所示;这也是你有的原因)公式中的+/-符号).
在大多数编程语言中,您也会发现atan2,在这种情况下,您应该能够用一些代码替换
if tmp < 0
// no solution
else
angle1 = atan2(pow(v, 2) + sqrt(tmp), g * x);
angle2 = atan2(pow(v, 2) - sqrt(tmp), g * x);
end
Run Code Online (Sandbox Code Playgroud)