減衰振動
過去ブログの転載です。
減衰振動とは、その名の通り減衰していく振動のことです。
定数を用いて、と表わされます。
グラフはこんなかんじです。時間とともに減衰していく様子が確認できますね。この振動は一見すると物々しいもののようですが、実はかわいいのです。見てください。
ふわっと膨らんでしぼんでぶるぶるするのです。いいでしょう。ゲーム作りで使いたくなってきますよね。使ってるのは正弦関数と指数関数なので、ツクール2000でも使えそうです。
減衰振動のパラメータは多いので、どういうときにどうしたらいいかをまとめました。
:のときになる値。振動が減衰しきって落ち着いたときの値ですね。
:減衰振動そのものの大きさ。大きいほど激しい振動になります。
:減衰スピード。大きいほど速く減衰が終わります。小さくすればなかなか減衰しない。
:振動スピード。大きいほど一回一回の振動が速くなります。
:初期位相。振動のズレです。必要であれば設定していいと思いますが、基本的に0でいいです。
一番いいのは、てきとうな値にして試行錯誤することでしょうね。何か条件でも入れて計算すればそれっぽいのは求まりますが、めんどくさそうです。
減衰振動の場合分けと終了条件(収束判定)
以下では、パラメータによる減衰振動の場合分けと、減衰振動が止まるための条件について考察します。終了条件がわからないと困る場面もそこそこあるので、求められるようにしておきましょう。
ただし終了条件といっても、本来はいつまでも減衰し続けるので、減衰が止まることはありません。そこで、振動の幅がある値以下になったら止まったと判定することにします。
例えばピクセル単位の画像の移動に減衰振動を使うとしたら、1ピクセル以下の振動になったらもう振動してないのと同じですから、とすればいいのです。
また、終了したと判定するための時間をとします。となったら減衰終了でとなります。
要するに減衰振動の収束判定を考えます。
パターン1:何もなし(a=0またはc=d=0のとき)
かのときはになってしまうので、これは何も起きません。
であり、常にです。これは考える価値はありません。
パターン2:非減衰な振動(パターン1ではないが、b=0のとき)
減衰の部分がなくなって、となります。これはただの振動です。減衰しないので、振動は永遠に続きます。つまり、となります。これはこれで使いますけど、ここであえて言及することは特にありません。
パターン3:減衰するだけ(パターン1, 2ではないが、c=0のとき)
今度は逆に減衰するけど振動はしないパターンです。となります。が掛かってますが、これはが入ってないただの定数なので、実質が係数で減衰し続けるだけになります。減衰が終わるととなります。
減衰が終わる条件を求めてみましょう。減衰項による変化が以下になったら終了と判定します。すなわち、となるときの最低のをとします。
となります。これ以降のなら常に以下になるので、
ということになります。
ならと見なせるわけですね。
パターン4:減衰振動(パターン1, 2, 3のどれでもない)
これがホントの減衰振動です。です。
減衰振動ではより大きくなって、小さくなって、を繰り返していて、この振動の最中に突然になったら不自然ですから、大きくなるのと小さくなるのの間となる、振動のない瞬間に止めることを考えましょう。
ということで、まずはとなるときの条件を求めます。は0になることはないので、となるときですね。つまり整数を用いてと表されるときです。そのときのは、となります。
整数は任意ですが、のとき常に以下になるような整数を考えます。すなわち、となるようにします。このを求めましょう。
振動に関わらず、減衰部分だけ考えて
となるときのを求めてみます。
となるので、右辺と一致するようなtになるときのを求めます。
が成り立つということです。
となりました。このを超えるようなであれば常に以下になるので、これの切り上げという意味で、次のようにしてを決めます。
は小数点以下切り捨てです。切り上げは何かと使いづらいので1足して切り捨てました。厳密には切り上げじゃないので無駄があるのですが、とりあえずをこのように決めれば常に以下になります。
従って、として
として求まるときのよりが大きければ減衰振動が終了したと判定できます。