我已经搜索了互联网上的资源,并找到了许多有用的信息,但它们都是数学网站,试图告诉我如何解决一个物体到达y位置必须处于什么角度的问题。然而,我正在尝试运行一个模拟程序,但还没有找到任何可靠的方程可以实现编码来模拟抛物线曲线。那些对物理有一定了解的人能帮助我吗?
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,因为唯一的加速度是由于重力引起的,即Ay = -g。负号来自于重力将会沿着物体原本的运动方向作用于相反的方向。Ux和Uy可以通过简单的三角函数计算得出:
Ux = U*cos(angle);
Uy = U*sin(angle);
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米/秒
(不要忘记屏幕上的“向下”实际上是垂直位置的增加,因此你也可以使用+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
一些定义:
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
x=0
,y=0
。我还忽略了空气阻力和其他各种效应,例如由于地球自转而产生的科里奥利力--如果我们谈论的是洲际导弹的弹道轨迹之类的话,这些因素会很重要。 - Tim GoodmanVx
和 Vy
添加到上一个位置,或者只需使用 t
的函数公式计算新位置的 x
和 y
。 - Tim GoodmanV0
),并选择一个介于零和π弧度之间的角度A
,以便在t = 0
时Vy > 0
。 - Tim Goodmanvx
、vy
、x
和y
吗?你确定这些变量本身是浮点数或其他类型而不是整数,对吧? - Tim Goodmanhttp://sites.google.com/site/physics2d/
说实话,我还没有深入研究过它,我是在Scott Whitlock的代码项目文章中发现的。
http://www.codeproject.com/KB/WPF/SoapBoxCorePinBallDemo.aspx