实施弹丸运动

我已经在互联网上搜索了很多有用的信息,但他们是数学网站试图告诉我如何解决一个对象到达y位置的角度。 但是,我正在尝试运行模拟,并且没有找到可以实现代码来模拟抛物线的任何实体方程。 那些具有一定物理知识的人可以帮助我吗?

虽然Benny的答案很好,特别是在一般性方面,但您可以完全解决问题,而不是使用有限的集成步骤。 你想要的等式是:

s = u*t + 0.5*a*t^2; 

请在此处查看其来源。

这里s是位移,u是初始速度,a是加速度,t是时间。 这个等式只是一维的,但可以很容易地用于你的问题。 您需要做的就是将射弹的运动分成两个部分:一个与加速度平行,一个与垂直相平行。 如果我们让Sx描述x方向上的位移和Sy描述y方向上的位移,我们得到:

 Sx = Ux*t + 0.5*Ax*t; Sy = Uy*t + 0.5*Ay*t; 

现在在你的特定例子中,Ax是0,因为唯一的加速度是由于重力引起的,即在y方向,即Ay = -g。 减号来自于重力将作用于与物体原始运动相反的方向。 Ux和Uy来自简单的三角学:

 Ux = U*cos(angle); Uy = U*sin(angle); 

把这一切放在一起你会得到两个方程式,描述射弹在发射后的某个时刻t的位置,相对于它的起始位置:

 Sx = U*cos(angle)*t; Sy = U*sin(angle)*t - 0.5*g*t^2; 

不要将方程用于位置。 相反,使用速度方程。 从对象的旧速度计算模拟的每个循环的新速度,并将其应用于对象。 您需要知道模拟的每个循环之间经过的时间。 当然,这适用于垂直或水平速度。

 v_new = v_old + acceleration * delta_time (from wikipedia) 

然后申请:

 position_new = position_old + v_new * delta_time; 

你可以使用-9.8 m/s的简单加速度(不要忘记屏幕上的“向下”实际上是垂直位置的增加!所以你可以使用+9.8来简化)。 或者您可以获得想象并添加可变加速度(例如,如果您还在对对象的水平运动进行建模,则来自风)。

基本上,你应用的加速度是基于施加在物体上的力的总和(重力,摩擦力,喷射推进力等)。

 F_final = F1 + F2 + ... + Fn 

以下内容可以帮助您。

如果要对应用于对象的力进行建模,请首先使用以下方法将力分解为其水平和垂直分量:

 F_horiz = F * sin( angle ) F_vert = F * cos( angle ) where angle is the angle between the force and the horizontal. 

然后使用以下方法计算力的加速度:

 a = F / mass 

(我将这些知识归功于我的第一次编程经验:GORILLA.BAS =))

一些定义:

 x = x-coordinate (horizontal) y = y-coordinate (vertical) Vx = x-velocity Vy = y-veloctiy t = time A = initial angle V0 = intial velocity g = acceleration due to gravity 

一些方程式:

 Vx = V0*cos(A) Vy = V0*sin(A) - g*t x = V0*cos(A)*t y = V0*sin(A)*t - (1/2)*g*t^2 

这是一个可以帮助你的好图书馆

http://sites.google.com/site/physics2d/

我没有过多说实话,我在Scott Whitlock的代码项目文章中遇到过它。

http://www.codeproject.com/KB/WPF/SoapBoxCorePinBallDemo.aspx