gpt4 book ai didi

algorithm - 找到初始速度和角度以击中已知位置(抛物线轨迹)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:08:51 26 4
gpt4 key购买 nike

我目前正在使用 XNA 4.0 制作一款小型回合制大炮游戏。游戏非常简单:玩​​家选择他想要发射火箭的速度和角度以击中另一名玩家。还有一个随机生成的风矢量会影响火箭的 X 轨迹。我想添加一个 AI,以便玩家可以在单人模式下与计算机对战。

我想要实现 AI 的方式非常简单:找到可以让火箭直接击中玩家的速度和角度,然后为这些字段添加一个随机修改器,这样 AI 就不会同时击中另一个玩家时间。

这是我用来更新火箭位置和速度的代码:

            Vector2 gravity = new Vector2(0, (float)400);   // 400 is the sweet spot value that i have found works best for the gravity
Vector2 totalAcceleration = gravity + _terrain.WindDirection;
float deltaT = (float)gameTime.ElapsedGameTime.TotalSeconds; // Elapsed time since last update() call

foreach (Rocket rocket in _instantiatedRocketList)
{
rocket.RocketSpeed += Vector2.Multiply(gravity, deltaT); // Only changes the Y component
rocket.RocketSpeed += Vector2.Multiply(_terrain.WindDirection, deltaT); // Only changes the X component
rocket.RocketPosition += Vector2.Multiply(rocket.RocketSpeed, deltaT) + Vector2.Multiply(totalAcceleration, (float)0.5) * deltaT * deltaT;

// We update the angle of the rocket accordingly
rocket.RocketAngle = (float)Math.Atan2(rocket.RocketSpeed.X, -rocket.RocketSpeed.Y);

rocket.CreateSmokeParticles(3);
}

我知道找到最终 X 和 Y 坐标的基本方程式是:

  • X = V0 * cos(theta) * 总飞行时间

  • Y = V0 * sin(theta) * totalFlightTime - 0.5 * g * totalFlightTime^2

其中 X 和 Y 是我要击中的玩家的坐标,V0 是初始速度,theta 是火箭发射的角度,totalFlightTime 顾名思义,是火箭的总飞行时间,直到它到达 (X, Y) 并且 g 是重力(在我的游戏中是 400)。

问题:

我遇到的问题是,知道在这些公式中的何处添加风(是否只是在 X = 方程中添加“+ windDirection * totalFlightTime”?),以及如何处理这些方程以便因为有 3 个变量(V0、theta 和 totalFlightTime)并且只有 2 个方程,所以做我想做的事(找到初始速度和 theta 角)?

感谢您的宝贵时间。

最佳答案

您可以按如下方式执行此操作:

假设 V0 没有特定限制(即机器人可以以任何所需速度发射火箭)并使用替换

T=totalFlightTime 
Vx=V0cos(theta)
Vy=V0sin(theta)

为 Vx 选择一个任意值。现在你的第一个等式简化为

X=VxT  so T=X/Vx

求解T。现在将T的值代入第二个方程并求解Vy

Y=VyT + gT^2/2  so Vy = (Y - gT^2/2)/T

现在您终于可以求解 V0 和 theta

V0 = Sqrt(Vx^2 + Vy^2)  and Theta = aTan(Vy/Vx)

请注意,您最初选择的 Vx 将决定导弹的轨迹 - 如果 Vx 很大,那么 T 会很小,轨迹几乎是一条直线(就像向附近目标发射的子弹) - 如果 Vx很小,那么 T 会很大,轨迹将是一个弧形(就像迫击炮弹的路径)。您从三个变量(V0、totalFlightTime 和 theta)开始,但它们是因变量,因此选择任何一个(或在本例中为 Vx)加上两个方程即可求解另外两个。您还可以预先确定飞行时间并求解 Vx、Vy、theta 和 V0,或者预先确定 theta(尽管这会很棘手,因为某些 theta 不会提供真正的解决方案。

关于algorithm - 找到初始速度和角度以击中已知位置(抛物线轨迹),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16701886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com