ねこでじ(Nekodigi)

Nekodigi’s diary

学習中の気づきをまとめています。応援よろしくお願いします

【Processing】Differential Growthを実装する

成果物

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