加速度について

このページではAI製作時の加速度による移動距離の変化などの加速度に関しての理解の助けになればと思い書きました。
加速度については学校で習われた方が疑問に思いやすい
「距離=(速度×時間)+(加速度×((時間×(時間-1))/2)」の式の理由なども載せています。
間違いを発見された方は右上のCONNTACTから指摘してもらえると助かります。
なおこのページでの
MUGEN上における加速度とは現在の速度に加算する値(VelAddなど)、
MUGEN上における摩擦係数とは現在の速度に乗算する値(VelMulなど)の事を言っています。

序章:処理順による誤差

まず距離や速度を計算する際に一つ注意点があります。
それは距離や速度の変化の処理タイミングです。
このページの計算は変化後に計算しているので、距離計算後の同一フレームで変化してしまうと、計算した結果と実際の結果でズレが生じます
対処法としては、
・より遅い処理順である計算を行う(例えばヘルパーなど)
・変化より早い処理順で計算するなら、予め初速度を「変更後の速度」にして計算する
などがあります。
参考:豆知識>読み込みと処理順[MUGENの便覧]

1章:速度(一定速度の場合)

速度とは一定時間あたりに進む距離のことを表します。
まず現実の1例で移動する距離や速度を考えます。
例えば時速60[km]とは1時間に60[km]進むということなので、
常に時速60[km]で2時間進んだ場合を考えると、
60[km/時間]×2[時間]=120[km]
進むという事になります。
これを図で表すと、 となります。
図1は経過した時間に対して速度を表しており、図2は経過した時間に対しての進んだ距離を表しています。
ここで図1は一定速度なので長方形になっておいます。
「長方形の面積」=縦×横なので、「進んだ距離」=速度×時間より、面積が距離を表していることが分かります。

では次にMUGENで考えます。
MUGENの時間の単位はF(フレーム)です。
例えばカンフーマンの前進速度2.4[/F]を図1,2と同様に表すと、
となります。
図3が図1と異なるのはMUGENの処理が1F毎に行われるため、1F毎に移動するためです。
これは以降で説明する速度が変化する場合にも関係してきます。 また(距離)=速度

2章:加速度(一定加速度、初速度0の場合)

(初速度(時間が全く経過していない時の速度)が0、MUGENなら計測始めた時の速度)
速度についての章では速度が一定な時を考えましたが、次は速度が変化する場合を考えます。
加速度とは一定時間当たりの速度の変化率を表します。
速度についての章と同様にまず現実の1例で速度と距離を考えます。
例えば加速度が9.8[m/秒2]で一定で、初速度を0[m/秒]だとした時の4秒後の速度は、
9.8[m/秒2]×4[秒]=39.2[m/秒]となります。
これを図1と同様に表すと下図の様になります。
acceleration_a2.png(2389 byte)

図5:加速度による速度[m/秒]の変化

図1の長方形と異なり図5は直角三角形となっています。
これは速度0から一定加速度により増加しているからです。

次に進んだ距離を考えます。
速度についての章で書いた面積が距離を表しているより、直角三角形の面積を求める事で進んだ距離が分かります。
(直角三角形の面積)=0.5×(底辺の長さ)×(高さ)
なので進んだ距離は
0.5×(経過した時間)×((加速度)×(経過した時間))
となり、まとめると、
(進んだ距離)=0.5×(加速度)×(経過した時間)2
2は2乗(2回かける事)を表しています。)
で求められる事が分かります。
以上より今回の場合の4秒後の距離は、
0.5×9.8[m/秒2]×4[秒]2=78.4[m]
となります。
acceleration_a1.png(2970 byte)

図6:加速度による進んだ距離[m]の変化


これを図1と同様に表すと左図のようになります。
二次曲線を描き時間の経過とともに大きく進んでいることが分かります。
以上が現実での一定加速度による変化です。

では次にMUGENの場合を考えます。
例えばカンフーマンの落下速度0.44[/F2]を使って考えます。
図5と同様に4F目までを表すと下図のようになります。
acceleration_aF2.png(2352 byte)

図7:MUGENにおける加速度による速度[/F]の変化

このように速度の場合と同様に1F毎に処理されるため長方形が並ぶ形になります。
薄く表示しているのは秒速と同じように考えた場合のものです。
上と同様に面積から進んだ距離を求めます。
(面積)=(0F目の速度[/F])×1+(1F目の速度[/F])×1+(2F目の速度[/F])×1+(3F目の速度[/F])×1
×1を計算してやると、
(面積)=(0F目の速度[/F])+(1F目の速度[/F])+(2F目の速度[/F])+(3F目の速度[/F])
と、面積はそれぞれのフレーム毎の速度を足し合わせたものになることが分かります。
よって、実際に数字を入れて計算すると、
(面積)=0+0.44+0.88+1.32=2.64
となりますので、面積と進んだ距離が等しいことから進んだ距離が求まりました。

acceleration_aF1.png(2999 byte)

図8:MUGENにおける加速度による進んだ距離[m]の変化


これを図2と同様に示すと左図のようになります。
薄い線で示したものが現実と同じように考えた場合の進んだ距離です。
このように加速度の反映のされ方が異なるために変わってしまいます。
今回は4F後と指定したので、単純に足し算をするだけで求められましたが、すべての場合を一々計算するのは面倒です。
そこで次の章ではMUGENでの加速度により変化する距離を、一定速度の場合の長方形や現実での加速度による三角形のような式で求める方法を説明します。

3章:等差数列

MUGENでの加速度による速度の変化は図7から1F毎に一定数で増加していることが分かります。
言い換えると常に前後の数字との差が等しい数字の列(数列)ということになります。
このような数列を等差数列と言います。
そして第3章で計算した様に面積はそれぞれのフレーム毎の速度を足し合わせたものになるので、面積を等差数列の合計だという事になります。
そこで、等差数列の性質から合計を求めます。
例としてカンフーマンの落下速度0.44[/F2]を使います。
n(nは自然数(正の整数)です)Fまでの場合を考えます。
1F毎に処理する関係上、移動する距離に関係あるのはn-1Fまでです。
よって、n-1F後までの速度を後まで表に書き、その下に順番を反転したものを書きます。
更にその下に通常のものと反転したものを足しあわせた物を書きます。
フレーム 0 1 2 ・・・ n-2 n-1
通常 0.44×0 0.44×1 0.44×2 ・・・ 0.44×(n-2) 0.44×(n-1)
反転 0.44×(n-1) 0.44×(n-2) 0.44×(n-3) ・・・ 0.44×1 0.44×0
合計 0.44×(n-1) 0.44×(n-1) 0.44×(n-1) ・・・ 0.44×(n-1) 0.44×(n-1)
この表の合計から分かるように、等差数列は差が等しい性質から反転したものと足しあわせた物はどのフレームでも等しくなることが分かります。
よって、この場合の等差数列の合計は
{(0F目の加速度による速度)+(n-1F目の加速度による速度)}を経過した時間(=総フレーム数)だけ足しあわせ、2で割ると求まることが分かります。
そして、(0F目の加速度による速度)は常に0なので、
(進んだ距離)=(n-1F目の加速度による速度)×(総フレーム数=n-1+1=n)×0.5
これを整理すると、
(進んだ距離)=0.5×0.44×(n-1)×n
となります。
0.44はカンフーマンの落下速度0.44[/F2]なので、この式を一般的な書き方をすると、
(進んだ距離)=0.5×(加速度)×(総フレーム数-1)×(総フレーム数)
となります。

4章:重力加速度(一定加速度、初速度がある場合)

初速度がある場合も時間と速度のグラフの面積から進んだ距離を求めることができます。
これ以降の章は最初からMUGENの場合で考えます。
初速度を1.2[/F]、加速度を0.44[/F2]とします。
この場合で図1と同様に経過した時間[F]に対する速度[/F]をグラフに表すと下図の様になります。
acceleration_vaF2.png(1662 byte)

図9:初速度がある場合の加速度による速度[/F]の変化


青い部分が初速度によるものを、赤い部分が加速度による速度を表しています。
この図から分かるように、青い部分は図3の一定速度と同じものであり、赤い部分は図7の初速度がない場合の加速度によって変化した速度を同じです。

つまり、ある時間の速度は初速度による速度と加速度による速度足しあわせた物だということが分かります。
これから進んだ距離を考えるには面積を考えれば良いのですが、図9から一定速度のものと加速度のものを足しあわせた物だと分かったので、それぞれの面積を出して足しあわせればいいだけです。
よって、
(進んだ距離)=(初速度)×(総フレーム数)+0.5×(加速度)×(総フレーム数-1)×(総フレーム数)
で求まります。
しかし、注意点があるので5章を参照してください。

5章:摩擦係数

まず加速度がなく摩擦係数のみがかかる場合を考えます。
これまで書いてきた1F毎に速度に加算されていく加速度と異なり、摩擦係数は1F毎に速度に乗算されていきます。
このため、上記の計算を適用できません。
しかし、速度と経過Fの図の面積が距離になることは変わりません。
例えば初速度が2.4で摩擦係数が0.5とし4F後の移動距離を考えます。
今までと同様に先ず3F目までの速度を考えます。(加速度と同様に4F目の速度は4Fまでの移動距離に関与しない。)
この場合1F経つ毎に速度は0.5倍されていくので 2.4 1.2 0.6 0.3 となります。
そして今回も移動距離を求めるには速度と時間の図から面積を求めることで出します。
速度と時間の図は下図のようになります。
acceleration_f2.png(1579 byte)

図10:摩擦係数と速度の関係

この面積も加速度の場合と同様に、縦の長さを速度とし横の長さを1とする長方形の面積、
つまり、1F毎の速度を足しあわせた物になります。
よって、
(距離)=(面積)=(0F目の速度)+(1F目の速度)+(2F目の速度)+(3F目の速度)
(距離)=2.4+1.2+0.6+0.3=4.5
となります。
この場合の時間と距離の関係の図は下図のようになります。
acceleration_f1.png(2339 byte)

図11:摩擦係数と距離の関係

しかし、加速度と同様に毎回速度を出して足し合わせるのは面倒です。
そこで、次の章ではこの数列の特性を利用し計算します。

6章:等比数列

摩擦係数での速度は常に等しい数字が乗算されている数列となっています。
このような数列を等比数列と言います。
(ちなみに、4章では1以下を乗算しているので小さくなっているが、1以上を乗算した場合でもいい)
4章から摩擦係数のみがかかる場合、距離は1F毎の速度を足したものなので、
速度は等比数列の和となることが分かります。
では、等比数列の和を求めます。
総F数をn、初速度をv、摩擦係数をr、この等比数列の和をSとして、等差数列の場合と同様に表に書きます。
そしてその下にr倍したものを、rの乗数を合わせるために一つ右にずらして書きます。
最後にずらして書いた物から通常の物を引いた物を書きます。
F 0 1 2 ・・・ n-2 n-1
S v*r0 v*r1 v*r2 ・・・ v*rn-2 v*rn-1
f*S v*r1 v*r2 ・・・ v*rn-2 v*rn-1 v*rn
(r-1)S -v*r0 0 0 ・・・ 0 0 v*rn
この表から摩擦係数r倍した和Sから和Sを引くと、右辺の2つ目からn-1つ目のn-2個の値が0になることが分かります。
これは乗算される数字が常に等しいため、r倍すると次の数字と等しくなることによるものです。
よって、表の最下段より
(r-1)S=-v+v*rn
と分かるので、
S=v*(1-rn/(1-r)
となりますので、言い換えると、
(速度)=(初速度)×{1-摩擦係数n}÷(1-摩擦係数)
となります。
注意点としては
1.分母に(1-摩擦係数)があるので、摩擦係数が1になる(摩擦が無い)場合、警告メッセージが出る。
2.MUGENの冪乗はint型を用いると正しく計算結果を返さないので、float型を用いるようにする。
参考:豆知識>冪乗(累乗)の計算[MUGENの便覧]

7章:加速度と摩擦係数

加速度と摩擦係数の両方が関与する場合について考えます。
これまでと同様に距離を考えるには速度を考え面積を出します。
面積はやはり縦の長さがそのFでの速度、横の長さが1である長方形の集まりになります。
なので、やはり距離=面積は速度を足しあわせたものになります。

初速度を4、加速度を1、摩擦係数を0.5とし4F目までの速度を考えます。
このとき、序章で説明した処理順が関係してきます。
具体的には先に加速度を関与させ後に摩擦係数を関与させる場合と先に摩擦係数を関与させ後に加速度を関与させる場合では異なるということです。
まず、先に加速度を関与させ後に摩擦係数を関与させる場合は
F 0 1 2 3 4
4 (4+1)*0.5=2.5 (2.5+1)*0.5=1.75 (1.75+1)*0.5=1.375 (1.375+1)*0.5=1.1875
となります。
しかし、先に摩擦係数を関与させ後に加速度を関与させる場合は、
F 0 1 2 3 4
4 4*0.5+1=3 3*0.5+1=2.5 2.5*0.5+1=2.25 2.25*0.5+1=2.125
となり、加速度と摩擦係数を関与させる順番で異なっていることが分かります。
このため、加速度と摩擦係数が関与させる順番に気をつけてください。
なお、上記の場合の速度の図は下図のようになります。
acceleration_af.png(4273 byte)

図12:加速度と摩擦係数が関与する場合の速度

赤色が先に加速度を関与させ後に摩擦係数を関与させる場合、
紫色が先に摩擦係数を関与させ後に加速度を関与させる場合です。

速度

では総フレーム数をn、kF目の速度をVk、初速度をv、加速度をa、動摩擦係数をrとして考えます。
Vkはその前のフレームのVk-1に加速度と摩擦係数が関与したものになります。
ここで上の結果から加速度と摩擦係数が関与する順番について考えます。
もし先に加速度が関与し後に摩擦係数が関与するのであれば、
Vk=(Vk-1+a)*r・・・(1)
となり、先に摩擦係数が関与し後に加速度が関与するのであれば、
Vk=r*Vk-1+a・・・(2)
となります。
それぞれの場合を考えることもできますが、
先に加速度が関与し後に摩擦係数が関与する場合の式(1)の右辺で分配法則を用いると、
Vk=(Vk-1+a)*r
Vk=r*Vk-1+a*r
となり、a*r=bとすると、
Vk=r*Vk-1+b
と、先に摩擦係数が関与し後に加速度が関与する場合の式(2)と形が等しくなることが分かります。
なので、Vk=r*Vk-1+aの式(2)のみを考えれば良いことになります。
この式は一つ前の速度が分かれば今の速度も分かるという形になっています。
このような式を隣接二項間漸化式と言います。
今回の式(2)では、もし+aが無ければ「一つ前の速度にrを乗算したものが今の速度」という等比数列の式になります。
そこで、
Vk-X=r*(Vk-1-X)・・・(3)という式の形にし、Wk=Vk-X・・・(4)とおくと、
Wk=r*Wk-1・・・(5)
という等差数列の式になり解くことができます。
では、まずXを求めるには式(3)である
Vk-X=r*(Vk-1-X)
の右辺を分配法則を用いて、
Vk-X=r*Vk-1-r*X
とし、左辺の-Xを右辺に移し、Xでくくると、
Vk=r*Vk-1+X*(1-r)・・・(6)
となります。
この式(6)を式(2)と比較すると、a=X*(1-r)であることが分かるので、X=a/(1-r)・・・(7)となります。
また、V0は0F目での速度なので初速度vです。
あとはWkが分かれば、式(4)からVkも分かります。
式(5)のWk=r*Wk-1より(等比数列であるので)
Wk-1=r*Wk-2、Wk-2=r*Wk-3、・・・、W1=r*W0なので、
Wk =r*Wk-1
=r2*Wk-2
=r3*Wk-3
=・・・
=rk*W0
この式に式(4)を代入すると、
Vk-X=rk*(V0-X)
となり、
Vk=rk*(V0-X)+X
となるので、式(7)のXとV0=vより、rkの位置を変えると、
Vk={v-a/(1-r)}*rk+a/(1-r)・・・(8)
速度={初速度-加速度/(1-摩擦係数)}×摩擦係数フレーム数+加速度/(1-摩擦係数)
となり、式(2)が求まりました。
試しに、0,1,2Fの速度を計算すると、
V0=v-a/(1-r)+a/(1-r)=v
V1=v*r-a*r/(1-r)+a*r/(1-r)=v*r+a*(1-r)/(1-r)=V0*r+a
V2=v*r2-a*r2/(1-r)+a/(1-r)=v*r2+a*(1-r)2/(1-r)=v*r2+a*(1+r)=(v*r+a)*r+a=V1*r+a
となり、きちんと求められていることが分かります。
式(1)の場合は、(2)式のaをbとしたものと等しくなるので、
Vk={v-b/(1-r)}*rk}+b/(1-r)
でb=a*rを代入すると、
Vk={v-ar/(1-r)}*rk+a*r/(1-r)
速度={初速度-加速度×摩擦係数/(1-摩擦係数)}×摩擦係数フレーム数+加速度×摩擦係数/(1-摩擦係数)
となります。
これも試しに0,1,2Fの速度を計算すると、
V0=v-a*r/(1-r)+a*r/(1-r)=v
V1=v*r-a*r2/(1-r)+a*r/(1-r)=v*r+a*r*(1-r)/(1-r)=(v+a)*r=(V0+a)*r
V2=v*r2-a*r3/(1-r)+a*r/(1-r)={v*r+a*(-r2+1)/(1-r)}r={v*r+a*(r+1)}r={(v+a)*r+a}*r=V1+a*r
となり、きちんと求められていることが分かります。

距離

では距離を求めます。
まず、式(2)の場合を式(8)から考えます。
Vk={v-a/(1-r)}*rk+a/(1-r)より、
0~(n-1)F目までの速度を表にしますが、{v-a/(1-r)}*rkを下に、a/(1-r)を上に2段に分けて書きます。
F 0 1 2 ・・・ n-2 n-1
a/(1-r) a/(1-r) a/(1-r) ・・・ a/(1-r) a/(1-r)
{v-a/(1-r)}*r0 {v-a/(1-r)}*r1 {v-a/(1-r)}*r2 ・・・ {v-a/(1-r)}*rn-2 {v-a/(1-r)}*rn-1
合計はこの表の中段と下段を全て足せば良いのですが、中段は全て同じ数字、下段は等比数列となっています。
よって、中段のみを足し合わせるとはa*n/(1-r)、
下段のみは第5章の式で初速度を{v-a/(1-r)}、摩擦係数をrとして計算すると{v-a/(1-r)}(1-rn)/(1-r)となり、
(距離)=a*n/(1-r)+{v-a/(1-r)}*(1-rn)/(1-r)
(距離)=加速度×総フレーム数/(1-摩擦係数)+{初速度-加速度/(1-摩擦係数)}×{1-摩擦係数総フレーム数}/(1-摩擦係数)}
となります。
式(1)の場合は速度の場合と同様に考えて、
(距離)=a*r/(1-r)*(n-1)+{v-a*r/(1-r)}(1-rn-1)/(1-r)
となり
(距離)=加速度×摩擦係数×総フレーム数/(1-摩擦係数)+{初速度-加速度×摩擦係数/(1-摩擦係数)}×{1-摩擦係数総フレーム数}/(1-摩擦係数)}
となります。
以上で距離も求まりました。
ページのトップへ戻る
inserted by FC2 system