バネマス系にダンパを入れて、安定させました。つまりバネマスダンパ系!
jsonで設定化されているので、質点やリンクはいくつでも増やせます。今回は質点4個、リンク3個でブランコ。
ちゃんと安定動作しているので、あとやること無くなった。ひとまずこれでバネマスダンパ系の遊びは終わりですね。
まずは実行結果:
やってることは前回(Processingでバネマス系 その2)とほとんど変わりませんが、リンクに対してダンパを追加したので質点に対する外力計算が変わってます。設定ファイルもダンパ係数cを追加しました。
class MidpointOdeSolverのsolve()の一部(ダンパに関する外力計算部):
// viscos force // Fc = - (v dot unit_dir) * c * unit_dir float dir_v0 = PVector.dot(points[links[i].p0].v, unit_dir); PVector f_c0 = PVector.mult(unit_dir, -dir_v0 * links[i].c); float dir_v1 = PVector.dot(points[links[i].p1].v, unit_dir); PVector f_c1 = PVector.mult(unit_dir, -dir_v1 * links[i].c); accels[links[i].p0].add(f_c0.x / points[links[i].p0].m, f_c0.y / points[links[i].p0].m); accels[links[i].p1].add(f_c1.x / points[links[i].p1].m, f_c1.y / points[links[i].p1].m);
data.jsonの一部(ダンパ定数cが追加された):
"links": [ { "p0": 0, "p1": 1, "k": 1000, "c": 0.5 }, { "p0": 1, "p1": 2, "k": 1000, "c": 0.5 }, { "p0": 2, "p1": 3, "k": 1000, "c": 0.5 } ]
まとめ
ということで、バネマスダンパ系シミュレーターとしては安定してしまいました。data.jsonでいろいろモデルを作ったら楽しいかもですが、いったん放置で。
なんか面白いこと思いついたらやってみます。