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