一次元運動
一次元運動
速さ、速度、加速度
それぞれの単語は意味が違う事に留意。速さと速度は慣れないうちは混同しやすいので注意が必要
速さ | スカラー | float | Speed |
速度 | ベクトル(ベクトルの長さ=速さ、向き) | Vector2,3 | Velocity |
加速度 | スカラー | float | Accele |
- unityではベクトルとスカラーを掛算できる
- time.deltatimeがΔtに該当
自転車を運転する時を思い出してもわかるように通常、速さは絶えず変化しています
したがって速度について平均速度と瞬間速度というふたつの速度を考える必要があります
平均速度 | 観測地点、観測時間に関わらず一定の速度が前提 |
瞬間速度 | 観測地点、観測時間によって加速度にしたがって違う速度になる |
速度が一定の場合、どの地点でも平均速度と瞬間速度は同じになる
<公式で良く使われる変数>
d | Delta(Δ) | 変位 |
v | Velocity | 速度 |
t | Time | 時間 |
a | Accele | 加速度 |
f | final | 終端 |
i | init | 初期 |
例:dv - deltaVelocity 速度変位
公式
一次元運動に関する公式
Δ(delta)は変位を表す。たとえばunityのTime.deltaTimeは「時間の変位」を表している。つまりTime.deltaTime=Δt
そして1フレームの更新する移動差がΔxとなる
基本公式 | ||
変位=速度×時間 | D=v*t | |
各フレーム間の変位=元の位置+速度×時間 | D=p+v*t | |
平均速度=変位/時間 | vv=xf-xi/t | vv=Δx/t |
加速度=最終速度-初速度/最終時間-初時間 もしくは、瞬間速度の変位/経過時間 | a=vf-vi/tf-ti | a=Δv/Δt |
下記5つの公式は式を変形したもの | ||
最終速度=初速度+加速度×時間 | vf=vi+a*t | vf=vi+a*Δt |
平均速度=(初速度+最終速度)/2 ただし加速度は一定の場合 | vv=(vi+vf)/2 | |
変位=1/2(初速度+最終速度)×時間(フレーム更新向き) | Δx=1/2*(vi+vf)*t | Δx=1/2*(vi+vf)*Δt |
変位=初速度×時間+1/2×加速度×時間^2(変位結果を得る向き) | Δx=vi*t+1/2*a*t^2 | Δx=vi*Δt+1/2*a*Δt^2 |
最終速度^2=初速度^2+2×加速度×変位 | vf^2=vi^2+2*a*Δx |
加速度がaで速度がv、vf、viな事に注意
つまり加速度と速度は全く別物である事を強く意識する事(加速度は車のアクセルの踏み具合。速度は実際の車が出しているスピード)
アクセルの踏み具合を固定していれば時間の経過と共に車のスピードはどんどん上がっていく。重力に対しても同じ考え方で
-9.8m/s^2が加速度でこれは固定したまま下に落ちるオブジェクトの速度は上がっていく
基礎的な速度、位置、加速度に対する考え方はここが判りやすい。参考資料:プログラムでの位置・速度・加速度 : PCBLOG
そして速度も瞬間速度と平均速度の2種類がある事を強く意識しておく必要がある
(ゲームプログラミングでは60fps=0.01666secなので瞬間にやや近いが、変位(デルタ)は更新前の前フレームと更新後の後フレームの平均とも言える)
unityにおける「時間」の考え方について
普段、何気なく使っているTime.deltaTimeは、前フレームが呼び出されたときからの経過時間を返します
この値を毎フレーム足し合わせ1秒経過した場合、1になっている事に注目してください
つまり秒速2ユニットでゲームオブジェクトを移動させたい場合、unityでは以下の様なコードを書きます
void Update () { transform.Translate(new Vector3(Time.deltaTime * 2 ,0,0)); }
- 最終更新:2015-02-24 01:07:31