模様生成2 『雪』
雪の結晶模様
模様シリーズその2 雪の結晶の成長シミュレーションっぽい事をやってみようー六角形の格子で雪の結晶を成長させる。
プログラムは
1. ほっとくと勝手に六角形に成長する
2. 先端が成長しやすい(パラメータで制御)
を満たしていればいいはず。
氷の量の配列iceの更新処理
1. ほっとくと六角形に成長する式iceが1を越えないように、そして結晶に隣接した点でしか成長しないようにする
var max=点(i,j)の周囲6点でのiceの最大値; ice[i][j]+=(1-ice[i][j])*max*max;
2. 先端が成長しやすいように修正
var av=点(i,j)の周囲の半径p以内でのiceの平均値; ice[i][j]+=(1-ice[i][j])*max*max/(1+Math.exp(32*av-4));
だいたいこんな感じ。見ての通りすごいテキトー。
あとは、iceの初期値として、数カ所だけゼロでない値をいれてやると・・・
動くサンプル
http://www.geocities.jp/flyinpng/snow20110531/マウスの位置に応じて成長する。
処理はやたらと重い。
この方法の他に、水蒸気代わりの粒子を沢山ばらまいて、引力と斥力を設定して、くっついて結晶化するのを待つ、という手段でも雪の成長シミュレーションっぽい事が出来るかも。