Processingで物理
http://www.cs.princeton.edu/~traer/physics/
Processingには様々な外部ライブラリが存在します。BETAのころは標準で搭載されていなかったminimを追加したりしました。メジャーバージョンになってminimも標準ライブラリとなっていたり。
さて、今回追加するライブラリは物理関連のライブラリです。こいつを導入してやれば、いろいろできる・・・はず。
ダウンロード
上のサイトの左上のあたりのDOWNLOADからphysics.zipをダウンロードします。ダウンロードしたら、zipファイルを解凍します。
Processingの外部ライブラリ追加方法
Processingの外部ライブラリ追加方法はいくつかあります。しかし、私がいつも用いているのは、Processingのメインのフォルダにあるlibrariesに追加する方法です。例えば、今回の場合解凍されたフォルダにはphysics.jarというJavaの実行型ファイルが入っています。これが外部ライブラリなのですが、これを直接librariesに放り込むだけじゃだめです。physicsというフォルダを作り、その中にlibraryというフォルダを作り、その中にphysics.jarを入れておきます。
まぁ、physicsは作者が親切で解凍したらそれをlibrariesに放り込むだけでいいんですけどね。
あ、libというまぎらわしいフォルダがあるので注意。
Processingの外部ライブラリ読み込み
import〜と書き始めても問題はないのですが、面倒です。上部メニューからSketch→Import Libraryを選択します。すると、追加できるライブラリの一覧が表示されるので、選択すればimport〜を追加してくれます。今回はphysicsを選択します。
デモ
作者サイトを参考にしながらデモを作成。
import traer.physics.*; ParticleSystem ph; Particle p; Particle a; Spring s; void setup() { size(400, 400); smooth(); fill(0); frameRate(30); ellipseMode(CENTER); ph = new ParticleSystem(5.0, 0.1); p = ph.makeParticle(1.0, width/2, height/2, 0); a = ph.makeParticle(1.0, width/2, height/2, 0); a.makeFixed(); s = ph.makeSpring(p, a, 1.0, 0.1, 100); } void draw() { if(!mousePressed) ph.advanceTime(1.0); else { p.moveTo(mouseX, mouseY, 0); p.setVelocity((mouseX-pmouseX), (mouseY-pmouseY), 0); } background(255); line(p.position().x(), p.position().y(), a.position().x(), a.position().y()); ellipse(a.position().x(), a.position().y(), 5, 5); ellipse(p.position().x(), p.position().y(), 20, 20); }
おー、最初のデモっぽいのができた!