我怎样才能find一个弹丸的发射角度?

我在做一个2D的游戏,在这个游戏中,单位之间互相射箭。 我知道射手和目标的位置以及射弹的初始速度。 我想知道抛射体为了落在目标上应该具有的角度。 目标可能与射手不同。

总结我知道v0,R和g和我需要find角度(或高度?)。

我读了http://en.wikipedia.org/wiki/Projectile_motion ,但我找不到与我需要的东西有关的东西。

Solutions Collecting From Web of "我怎样才能find一个弹丸的发射角度?"

find角度的公式是

式

其中v是初始发射速度,g是重力常数,x和y是目标的距离和高度。

这个等式的两个根源给你两个可能的角度。 如果结果是虚构的,那么你的初始速度不够大,不能达到目标(如果你想计算读取距离的角度)。 这取决于你select哪个角度。 select最直接的path即较小的角度是有意义的。

你可以看到下面的这个公式的GIF,具有不同的目标值和一个恒定的发射速度。

公式绘制为动画GIF

这个维基百科文章的资源

今年早些时候,我创建了一个简单的自上而下的射手。 我用了下面的方法:

较早的答案: https : //stackoverflow.com/questions/15364852/move-sprite-diagonally/15365570#15365570

public static class Helper_Direction { // Rotates one object to face another object (or position) public static double FaceObject(Vector2 position, Vector2 target) { return (Math.Atan2(position.Y - target.Y, position.X - target.X) * (180 / Math.PI)); } // Creates a Vector2 to use when moving object from position to a target, with a given speed public static Vector2 MoveTowards(Vector2 position, Vector2 target, float speed) { double direction = (float)(Math.Atan2(target.Y - position.Y, target.X - position.X) * 180 / Math.PI); Vector2 move = new Vector2(0, 0); move.X = (float)Math.Cos(direction * Math.PI/180) * speed; move.Y = (float)Math.Sin(direction * Math.PI / 180) * speed; return move; } } 

它计算两个位置之间的轨迹。