如果X = 0到128之间,且Y = 0并接近64,我该如何计算最小/最大Theta,以便在X <0或> 128之前Y = 64

时间:2019-02-07 22:03:16

标签: math trigonometry

我正在为一个游戏迷做像游戏这样的导弹指挥。

炸弹从屏幕顶部Y = 0落下,并在Y = 63处击中“地面”。炸弹以一定角度进入,因此我可以通过一点点触发来计算它:

BombX = initialBombX-bombDistanceTraveled * cos(bombTheta)

BombY = 0-bombDistanceTraveled * sin(bombTheta)

这很好用,但是我想将Theta随机化。但是,我希望炸弹始终在离开屏幕(x <0或x> 128)之前先击中“地面”(y = 63)。

请参阅此图以查看外观(白线=良好,红线=不良)

red lines bad theta, white lines good theta

有人可以帮我提出一个方程来用约束条件限制theta的情况吗?

初始X介于0和128之间

初始Y始终为0

如果Y <= 63,则X> 0 && X <128

谢谢!

2 个答案:

答案 0 :(得分:2)

简单三角学

tan(theta) = x/y

因此theta必须介于

-arctan(x/63)

arctan((128-x)/63)

对于介于0和128之间的任意选择的x,假设直线向下为theta = 0

答案 1 :(得分:0)

也许您可以简化一些事情。正弦和余弦计算可能看起来很慢,因此我们可以首先随机化x起始坐标以及x逼近坐标。然后:

xDelta = approachX - initialX;
bombX = initialX + ((( bombY + 1 ) * xDelta ) >> 6);