Math 如何使对象在圆弧路径中移动?

Math 如何使对象在圆弧路径中移动?,math,game-physics,2d-games,Math,Game Physics,2d Games,我正在做一个游戏,游戏中应该有一个机器人向另一个机器人投掷球状物体 投掷的球应该以对称的弧形飞行。很确定这个数学单词是抛物线 两个机器人都在x轴上 我如何在我的游戏中实现这样的事情?我尝试了不同的方法,但都不管用 在我的游戏中,当前移动物体的系统是这样的:每个物体都有x和y坐标(变量),以及dx和dy变量 每个对象都有一个move()方法,在游戏循环的每个周期中都会调用该方法。它只是将dx添加到x中,将dy添加到y 如何将我所描述的实现到这个系统中 如果涉及到很多数学问题,请尽量用简单的方式解释

我正在做一个游戏,游戏中应该有一个机器人向另一个机器人投掷球状物体

投掷的球应该以对称的弧形飞行。很确定这个数学单词是抛物线

两个机器人都在x轴上

我如何在我的游戏中实现这样的事情?我尝试了不同的方法,但都不管用

在我的游戏中,当前移动物体的系统是这样的:每个物体都有
x
y
坐标(变量),以及
dx
dy
变量

每个对象都有一个
move()
方法,在游戏循环的每个周期中都会调用该方法。它只是将
dx
添加到
x
中,将
dy
添加到
y

如何将我所描述的实现到这个系统中

如果涉及到很多数学问题,请尽量用简单的方式解释,因为我对数学不是很在行

我的情况:

非常感谢

你应该给你的导弹增加速度

速度是一个矢量,这意味着它表示导弹在x轴和y轴上的移动速度。现在,不要使用
Move()。大概是这样的:

void Update()
{
    position.X += velocity.X;
    position.Y += velocity.Y;
}
现在让我们想想,一旦导弹被击中,它会发生什么:

开始时,它有一定的起始速度。例如,有人在x方向以1米/秒的速度射击导弹,在y方向以-0.5米/秒的速度射击导弹。然后,当它归档时,导弹将被拉到地面——它的Y速度将向地面增长

void Update()
{
    velocity.Y += gravity;

    position.X += velocity.X;
    position.Y += velocity.Y;
}
这将使你的导弹根据物理原理(不包括空气阻力)移动,并生成一条好看的抛物线

编辑: 你可能会问如何计算初始速度。让我们假设我们有一个给定的射击角度(在射击线和地面之间)和初始速度(我们可能知道射击后导弹的速度有多快,只是不知道X和Y值)。然后:


除了Michal的回答,为了确保导弹击中机器人(如果你想让它跟踪机器人),你需要调整它的x速度

void Update()
{
    ball.dy += gravity;    // gravity = -9.8 or whatever makes sense in your game
    ball.dx = (target.x - ball.x); // this needs to be normalized.

    double ballNorm = sqrt(ball.dx^2 + ball.dy^2);
    ball.dx /= ballNorm;


    ball.x += ball.dx;
    ball.y += ball.dy
}

这将使导弹跟踪你的目标。向量的x分量确保它永远不会超过1的速度。它也不是完全“规范化”向量,因为通常情况下,你也必须对y分量进行规范化。如果我们在这里没有正常化,那么在第一次更新时,我们最终会得到一个球,它会一直跳到你的目标。如果你想让你的导弹飞得更快,只需将
ballNorm
乘以一定的数值。

你可以从这几个方程中得到你需要的一切 用于“最大高度到时间到距离”

g = gravity
v = start vorticity M/S
a = start angle deg

g = KG of object * 9.81
time = v*2 * sin(a) / g
range = v^2 * sin(a * 2) / g
height = v^2 * sin(a)^2 / 2*g
g = gravity
v = start vorticity M/S
a = start angle deg

g = KG of object * 9.81
time = v*2 * sin(a) / g
range = v^2 * sin(a * 2) / g
height = v^2 * sin(a)^2 / 2*g