将空气阻力添加到高尔夫球轨迹方程中


10

我正在VB.NET 2005中开发2D高尔夫游戏,但是我对如何实施会影响球的空气或风阻力感到困惑。

我已经有了射弹的这些方程式:

  • v0为击打或击打时高尔夫球的初始速度
  • 垂直和水平分量高尔夫球的速度:

    vx=v0cos(θ)vy=v0sin(θ)gt
  • 高尔夫球的垂直和水平距离:

    x=v0cos(θ)ty=v0sin(θ)t(0.5)gt2

如何在此方程式中增加空气阻力以适当影响高尔夫球的速度?我不知道该怎么做,有人处理过类似的方程式吗?

Answers:


10

我不确定是否存在用于阻力或风的闭合形式,但是以逐步的方式进行仿真非常容易(就像所有物理库一样):

  1. 设置您的初始条件:

    x,y,vx,vy(for t=0)
  2. 更新位置:

    x=x+(vx×dt)y=x+(vy×dt)

    (其中dt是自上次更新以来经过的时间,又称增量时间)

  3. 计算这些速度助手:

    v2=vX2+vÿ2|v|=v2

    (其中表示的长度)v|v|v

  4. 计算阻力:

    Fd[R一个G=C×v2

    (其中c是的摩擦系数

  5. 积累力量:

    FX=-Fd[R一个G×vX|v|Fÿ=-Fd[R一个G×vÿ|v|+-G×一个ss

    (是高尔夫球的质量)一个ss

  6. 更新速度:

    vX=vX+FX×dŤ一个ssvÿ=vÿ+Fÿ×dŤ一个ss

这基本上是欧拉近似这些物理的方法


有关注释所要求的模拟方式的更多信息:

  • 您的情况的初始条件是Ť=0

X=0ÿ=0vX=v0×CØsθvÿ=v0×s一世ñθ

它与基本轨迹公式基本相同,其中每次出现的t都被0替换。

  • 动能对于每有效。参见上文(3)中的。ķË=0.5V2Ťv2

  • 势能也总是有效的。PË=×G×ÿ

  • 如果要获取给定的当前,则需要为初始化仿真并进行小dt更新,直到XÿŤ1个Ť=0Ť=Ť1个

  • 如果您已经为计算了,并且想知道的值,其中,那么您要做的就是计算从到小dt更新步长XÿŤ1个Ť2Ť1个<Ť2Ť1个Ť2

伪代码:

simulate(v0, theta, t1)
  dt = 0.1
  x = 0
  y = 0
  vx = v0 * cos(theta)
  vy = v0 * sin(theta)
  for (t = 0; t < t1; t += dt)
    x += vx * dt
    y += vy * dt
    v_squared = vx * vx + vy * vy
    v_length = sqrt(v_squared)
    f_drag = c * v_squared
    f_grav = g * mass
    f_x = (-f_drag * vx / v_length)
    f_y = (-f_drag * vy / v_length) + (-f_grav)
    v_x += f_x * dt / mass
    v_y += f_y * dt / mass
  end for
  return x, y
end simulate

非常感谢您,我将尽力与您联系。
史密斯,

从您提供的这些方程式中,我想获得给定时间(t)的当前X和Y,我应该用V_x替换我的Vo并用v_y替换Vo吗?另外,如果我需要添加用于发射球的初始KE,这KE=0.5*m*(V*V)是否有效?
史密斯,

@Smith,我将编辑我的答案以回答您的问题
JonasBötel2011年

这正是我所做的,x始终为负,为什么?
史密斯,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.