如果 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);
我正在为 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);