Heatbugs実行の流れ
かなり適当なメモ
実行の流れはHeatbugModelSwarmのbuildActions内で定義
大事なのは下の2行
[modelActions createActionTo: heat message: M(stepRule)]; actionForEach = [modelActions createActionForEach: heatbugList message: M(step)];
まずHeatSpaceのインターフェースであるDiffuse2dのstepRule関数を実行
この関数で周囲のマスから温度の伝搬を行う
詳細はDiffuse2d.m内の実装を参照
Diffuse2d.mはhttp://pj.freefaculty.org/Swarm/Swarm-src/からダウンロードした
ソースコード内にある
Diffuse2dで出てくるdiscrete2dSiteAtというマクロはDiscrete2d.hに以下のように定義されていて
#define discrete2dSiteAt(l, offsets, x, y) ((l) + (offsets)[(y)] + (x))
座標x, yのポインタを返すマクロになっている
これでx, y上の温度を取得している
次にHeatbugのstep関数を実行
この関数でHeatbugの移動をし,温度を自分がいたマスに残す
詳細はHeatbug.m内の実装を参照