模様生成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/
マウスの位置に応じて成長する。





処理はやたらと重い。
この方法の他に、水蒸気代わりの粒子を沢山ばらまいて、引力と斥力を設定して、くっついて結晶化するのを待つ、という手段でも雪の成長シミュレーションっぽい事が出来るかも。