实施弹丸运动

时间:2010-03-20 00:24:20

标签: c# physics

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

4 个答案:

答案 0 :(得分:7)

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

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

Look here for an explanation of where this comes from.

这里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;

答案 1 :(得分:6)

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

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 =))

答案 2 :(得分:3)

一些定义:

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

答案 3 :(得分:1)

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

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

说实话,我没有太过深思熟虑,我在Scott Whitlock的代码项目文章中遇到过它。

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