hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。 |
今回はバネとダンパを使った減衰振動です。
バネは分かりますね、金属針金をらせん状にぐるぐる巻いたアレです。
ダンパとはダンパー、減衰装置のことです。減衰装置をおおざっぱに説明すると、
速度が大きいほど抵抗が大きくなってブレーキが強く働く装置です。水の中を歩く様子を想像すればいいと思います。
バネと力の関係は…
F = -k * x
xは引っ張って伸びた長さ、kはバネ定数、Fは力。
とまあ、こんな感じです。
減衰装置と力の関係は…
F = D * v
Dは抵抗、vは速度。
速度が大きいほど抵抗が大きい。
ゆっくりなら抵抗は小さい。
例によってモジュールをDLしておいてください。
ウィンドウ内をマウスでクリックすると重りを任意の位置に移動できます。
モジュール:mp001.as
+ | バネとダンパ サンプル |
b007.as
|
今回の重要な点は2点。
この2つです。座標系をバネの支点(中心点)を中心とした円座標系に
変換しておかないと後の計算が非常に困難です。(というか私はこうしないと無理。)
まずは、直行座標系でバネの支点を中心としたときの重りの座標を調べます。
rpx = px - pbx ;バネの支点を中心とした相対座標 rpy = py - pby rvx = vx - 0 ;バネの支点を中心とした相対速度 rvy = vy - 0
バネの支点位置から重りまでの距離を出します。x,y方向の距離を2乗してルートをとれば出てきます。
sqrt rpx*rpx + (rpy*rpy) dl = stat ;伸び
バネの支点位置から重りがどのくらいの速度で離れていっているのかを調べます。
これは円座標系で求める必要があります。
rvxとrvyをそれぞれ円座標に変換して足し合わせます。
vr = (rvx*rpx/dl) + (rvy*rpy/dl)
式を整理してHSP2用に書き換えると
vr = rvx*rpx + (rvy*rpy) / dl
こうなります。
これで計算に必要な数値が出てきました。あとはこの瞬間に重りにかかる力に直してみます。
F = -k*x + dv + ma
maは後で足すのでこんな感じになります。
axy = dl * -1*k/kmult + (vr*d/dmult)/m ;バネ方向加速度(バネ+ダンパ)
いつものように両辺をmで割ってます。
これで加速度が出てきましたが、これは円座標系です。
曲座標に直します。
ax = rpx * axy / dl ay = rpy * axy / dl
ここまで来ればあとはいつものように速度と座標を算出して描画すれば終了です。
今回はちょっと長かったですね。
※捕捉
計算の都合上、重りは元の位置(中心)に止まりません。(T-T)
バネと減衰機の式はこんな感じ。
F = -k*x + dv + ma