先日ちょっと話題になったおっぱい揺れシミュレータだけど、こうやって作りかたを書いておけば誰かまっとうなのを作ってくれるかもしれないと期待して書いておく。おっぱいの揺れを数理モデル化すると質点系(質点をバネ制約で繋いだもの)で充分だろう。ここでは簡単にするために、2D、APEでやってみる。3Dにするのは計算量が増えるだけで難易度が増すわけではないはず。ダイナミクスエンジンに必要なのは質点とバネ制約だけでよいので、APE以外のどんな物理シミュレーションエンジンでも、ほとんど同じようにできると思う。自前で作ってもそんなに難しくはない。ここではとりあえず半円上に7個の質点を作成する。質点はとりあえずAPEの場合CircleParticleでよい。衝突判定はしないので半径は何でもよい。この配置は単に簡単に計算しやすいからこうしているけど、質点の数と配置は揺れのリアリティに影響するので工夫の余地が大きい。両端の点は動かない点とする。APEだとCircleParticleのコンストラクタでfixed=trueにすればよい。つぎに全ての点の組み合わせをバネ制約で結ぶ。バネの硬さも揺れの感じに大きく影響する。シミュレータを名乗るなら、各パラメータを変更できるUIがあるべきだろうが、今は面倒なのでやらない。インタラクションは、とりあえずクリック位置に最も近い質点に適当な速度を与えてやることにする。下図は揺れている様子。表示系を少し変更してみる。質点を滑らかに曲線で結んでみる。点列を滑らかな曲線で補完するのはスプラインでもなんでもいいけど、ここではベジェの制御点をすごくいい加減な方法ででっち上げてつないでみる。下図は揺らしてみた様子。次は、質点に一致するように画像を貼り付けて、質点の揺らいだ分だけ画像を歪ませる。