這裡的做法忽略質量及空氣摩擦力,只單純以計算出初速度為目標:
重要變數定義及相關公式:
- V1:初速度
- V2:末(終)速度
- A:加速度
- S:位移
- T:時間
- V2 = V1 + A*T
- S = V1*T + ½*A*T²
推導過程:
- V1 + A*T = 0(發生在最高點的時候,也就是所謂跳的高度)
- A*T = -V1
- T = -V1/A
- S = V1*(-V1/A) + ½*A*(-V1/A)²
- S = -V1²/A + ½*(V1²/A)
- S = -V1²/A + V1²/(2*A)
- V1²/A - V1²/(2*A) = -S
- V1²*(1/A-1/(2*A)) = -S
- V1² = -S/(1/A-1/(2*A))
- V1 = sqrt(-S/(1/A-1/(2*A)))
- V1 = sqrt(-S/(0.5f/A))<=============結論
程式實作:
XXXX::PreExecute()
{
...
//在這裡使用公式…
m_fAraiseSpeed = sqrt(-m_fJumpHeight/(0.5f/m_fGravity));
...
}
XXXX::Execute(float dT)
{
...
m_fAcctime += dT;
float fUpDownMoveRange = m_fAraiseSpeed + m_fGravity*m_fAcctime;
fUpDownMoveRange *= dT; //這就是計算出來垂直移動的位移量。
...
}
沒有留言:
張貼留言