バネマス系などの物理シミュレーションして遊んでたのは今は昔、20年以上前になりますか。
当時はC++からSDL使ってみたり、MFCから標準のグラフィック使ったりしたっけ…

今はProcessingっていうのがあるんですね。まあ、数年前からそんなのあったなぁとは思っていましたが、ふと、また物理シミュレーションやってみたくなって、Processing始めました。

バネマス系のシミュレーションをやってみる(オイラー法)

やりたいことは2つの質点を作り、その間をバネで結ぶ。画面下方に重力加速度が働いていて、自由に運動させます。

物理シミュレーションについてはライブラリとかあるのかもしれませんが、自分で作ることに。
質点を表すクラス、リンク(バネ)を表すクラスを作り、2点とそれらをつなぐバネだけでシミュレーション。数値積分はオイラー法にて。とにかく手軽に作りたかったので難しいことはやらない。シンプルにオイラー法です。

結果の動画はこんな感じ:

Processingでバネマス系シミュレーション(オイラー法)

ダンパが無くバネだけで作ったらとっても不安定。
エネルギー保存の法則って何?って感じで元の高さを軽々超え、そして宇宙の彼方に消えてしまいました。んーこれじゃぁイヤ。

真面目にミッドポイント法(中点法)でシミュレーションしてみる

ミッドポイント法、実は実装するのが初めて。
以前シミュレーション作ったときはオイラー法だけでした。ていうかミッドポイント法の実装法が分からなかったから。

昔どっかでみたソースコードにミッドポイント法が書いてあったのを、記憶を掘り起こし、またWiki先生も調べながらなんとか実装しました。

その結果がこちら:

Processingでバネマス系シミュレーション(ミッドポイント法)

うん!いい!
エネルギー保存の法則が満たされている!
とっても安定!

満足しました\(^o^)/

まとめ

今回はバネマス系シミュレーションを作りました。
そして初めてミッドポイント法を実装し、その性能に感動!
若いころの自分に教えてあげたい気分になりました。

なんか楽しかった。物理シミュレーション作ってると懐かしくなってきます。昔を思い出して。これからまたなにか作ろうかなぁ?

今回作ったProcessingプロジェクト

オイラー法実装版:
sketch_20210819_2227_euler.zip

ミッドポイント法実装版:
sketch_20210819_2359_midpoint.zip

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です