成果物
www.youtube.com
HoudiniでRelaxノードというものを使って、Differential Growthを実装するTutorialを見たのですが、Processingでも簡単に出来そうなのに一度も実装したことがなかったので、さっそく実装してみました。
仕組み
Relaxは頂点をある大きさの円だと見なして、ぶつからないように移動させるというものです。
Relaxを行い、点と点の距離が一定になるようにResampleし、繰り返すとDifferential Growthが出来ます。Relaxノードはぶつかった円の法線方向にずらすだけでいいのですが。Resampleがなかなか大変でした。等間隔にサンプリングしていくと、最後に少し余りが発生してしまいます。このままだと、毎回終点の周りがスカスカになってしまいます。そこで、始めからと終わりから交互にResampleするとうまくいくはずです。ですが、普通のResampleをちょっと工夫をするとうまく動いてしまいまったので、そちらを採用しました。
今回は辺にSmoothをかけていないせいか、点が交差し始め発散してしまったので、Resampleをした時に離れすぎ内容に調整する処理を挟みました。
コード
Line Differential Growthという名前で追加しています。
github.com