Processingで雪の結晶(再帰)

Processing Advent Calendar 2017 10日目の記事です。

雪の結晶を作成する(ProcessingAdventCalendar2016#3) 去年のアドベントカレンダーでも雪の結晶作られていましたね。自分はパーティクルではなく再帰関数で雪の結晶を作ってみました。

 

 

 

基本的には再帰関数でよく見る木のサンプルを応用したものになります。再帰関数だけだと1枚目の画像のような雪の結晶になりますが、なんか物足りなかったので中身を塗るようにしました。(作った後に線だけのバージョンの方が良かったと言われましたが…

中身を塗る際に全ての枝の分岐点を保存しているのですが、保存した順番のまま中身を塗っていくと、再帰関数の奥へ奥へ潜っていく特性により思い通りにいきません。そこで多次元配列を用意してそれぞれの再帰レベルでの分岐点を保存して、後でそれぞれの再帰レベルで塗りを加えていきました。再帰部分より多次元配列のコーディングの方が難しかったです。

それと、いい感じのビジュアルを作るためにfilter(BLUR,int)によるブラーとblendMode(ADD)の加算を使っています。(明るさ調整部分のコードが全然スマートじゃなくて悲しいのでいい感じに調整できる計算式教えてください。)

また、以下の変数をいじると色々な結晶が生成できます。