スーパーボールのはねかた。

上の絵、とても見にくいや。リクエストも頂いたことですしGIFアニメ (http://shinh.skr.jp/tmp/sb.gif) を一時的に置いておきます。

ボールを弾ませたときの話から (http://risky-safety.org/~zinnia/d/2004/07/#20040728-t1-h1-p0)

実際計算始めてみるとつまらんかった。 5年ぶり位にこういう計算したので間違ってたらごめんなさい。

まずめんどうなので跳ねかえり定数 e \equiv 0 (追記: 違うヨ。もちろん 1 が正解)。ボールは球形なので慣性モーメント  I = \frac{2}{5}mr^2 。地面の摩擦係数は k として、速度の横方向成分 v_n と角速度 \omega_n は着地して反射した後に、

v_{n+1} = v_n - \mu(v_n+r\omega_n)

\omega_{n+1} = \omega_n - \nu(v_n+r\omega_n)

と変化します。ただし  \mu \equiv \frac{k}{m}, \nu \equiv \frac{5k}{2mr} 。上は角運動量変化は力積に等しいというやつで、下は角運動量変化はトルクに等しいってヤツ(追記: 違うヨ。これはなんて言う法則だっけか)。

で、せっかくだから最近リリースされた Ruby/SDL を使って動かしてみたものがこれ。

http://shinh.skr.jp/tmp/sb.rb

kochi.ttf をカレントに置いて下さい。 initial parameters というところを適当にいじるとヘンな跳ね方します。だんだん速度が増えたりとか。あと空気抵抗とかそういうのは全部無視。あとこれは本気でシミュレーションをやってるわけではないです。ただ上の漸化式をシミュレートしてるだけ。値とかも適当です。 1ドット何メートルやねんとか聞かれても知りません。

まあつまるところ「見えないパラメータ」というかスーパーボールを state machine たらしめている理由は角速度です。

ああ、あと跳ね返り係数をまともに考えるとこの問題はもう少し面白くて、何度か跳ねた後に突如として転がり始めます。スーパーボールでは跳ね返り係数が高すぎて再現しませんけど、ピンポン玉とかでその現象を見たことあるはず。

どうでもいいけど跳ね返り係数とか摩擦係数とか現象論的でイヤですね。でもマジメにやるとかなり難しい問題らしいですね。摩擦や衝突は電磁気力由来だと言ってもなかなか信じてもらえないことが多いですね。

追記: なんとなく exerb を一度使ってみたかったので Windows バイナリを配ってみる。

http://shinh.skr.jp/tmp/sb.exe.bz2

追記: たぶん、高さは変わらないと思います (http://www.bsddiary.net/d/200407.html#29) 。一応買ってきたアミノ式についてたスーパーボールで遊んで眺めてみましたが、高さに差は無いように見えます。でも前述の通り摩擦は難しいので正直自信無いです…

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h