ノード群を円環状に描画

ネットワークの次の段階として、スキップ(用の)リンクを作るので、ノードをY軸方向に並べると、隣接ノードとのリンクとスキップリンクが分かりにくいと思ったのと、0と31(シミュレータ上でのハッシュ値の最大値)を繋げても、まともに表示できるようにと、円環状にノードを描画するようにしてみました。
(まだ0と31はつなげていないので、似非)

@ 個体の移動知能について
昨夜の段階では次のようになっていました。
(少し上がる: Y軸-=3, 少し下がる: Y軸+=3)

  1. 上方向隣接ノードが座標上で自分よりも下にいたら少し下がる
  2. 上方向隣接ノードが座標上で自分より上すぎるところにいたら少し上がる
  3. 下方向隣接ノードが座標上で自分よりも上にいたら少し上がる
  4. 下方向隣接ノードが座標上で自分よりも下すぎるところにいたら少し下がる

と単純な規則かつ、自分を中心として隣接ノードしか意識していませんが、相互作用によって、群全体がY軸上にハッシュ値でソートされます。
(前段階として、自分により近いハッシュ値のノードと上方向の接続をし、隣接ノードとなる習性を持っています)

これは表示上の話だけで、ネットワークとは全く関係ありません。
なので、次のようにしました。

昨夜の「Y軸」を「角度」に置き換え、各ノードは発生段階で半径Rを一定の範囲内でランダムに決定する。
(少し上がる: 角度+=3°, 少し下がる: 角度-=3°)

@ 反省とか
超簡単なはずだったのですが、途中ラジアンで計算するところをデグリーで計算していて、ノードが変なところへ飛んでいくので、いろいろ混乱して、円の座標について、インターネットで調べてしまいました・・。
シミュレータを作り始めて思ったのは、昔学校でやっていた力学とか、数学とか、ぱっとはぜんぜん思い出せないということです。
かといって、リアルでそんなもの使う機会ないし、もうあきらめた!!!1
ゲームプログラマが数学得意なのは、グラフィックの描画などで日常的に使うからだなと改めて思いました。(いいわけ)

@ 絵とか
f:id:ultraist:20060402041146p:image
自分と近いハッシュ値と繋がりあうことで全体が整列していることをリンク表示で確認できます。
今のところ、ノードの大量離脱(1/2程度)にはかなり強いのですが、ノードの大量発生(2倍程度)には弱いみたいです(そもそも構築するからか)。

f:id:ultraist:20060402040649p:image
ハッシュ値の小さいほうから大きいほうへ色分けしているので、分布が分かりやすいです。

今日のWin32実行形式