如果 X = 在 0 和 128 之间并且 Y = 0 并且接近 64 我如何计算 Min/Max Theta 以便在 X < 0 或 > 128 之前 Y = 64

If X = between 0 and 128 and Y = 0 and approaching 64 how to I figure out the Min/Max Theta so that Y = 64 before X < 0 or > 128

我正在为 arduboy 开发类似导弹指挥的游戏。

炸弹从屏幕顶部 Y = 0 落下并击中 Y = 63 处的 "ground"。炸弹以一定角度进入,所以我可以用一些三角函数来计算它:

BombX = initialBombX - bombDistanceTraveled * cos(bombTheta)

BombY = 0 - bombDistanceTraveled * sin(bombTheta)

效果很好,但我想随机化 Theta。但是,我希望炸弹在离开屏幕(x < 0 或 x > 128)之前始终击中 "ground" (y = 63)。

请看这张图(白线 = 好,红线 = 坏)

谁能帮我想出一个方程来限制 theta 的约束:

初始 X 将介于 0 和 128 之间

初始Y永远为0

如果 Y <= 63 那么 X > 0 && X < 128

谢谢!

简单的三角函数:

tan(theta) = x/y

所以 theta 必须介于

之间
-arctan(x/63)

arctan((128-x)/63)

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

也许你可以简化一些事情。正余弦计算可能会比较慢,所以我们可以先随机化 x 起始坐标,以及 x 接近坐标。那么:

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