2013年10月14日月曜日

TPでboidsをセットアップしてみる。その3 Cohesion

今回は、個々が独りぼっちにならないように結合(Cohesion)の設定を行う。
これまでの、boidの個々はgoalに向かうよう設定されているため、はぐれる事はない。
だがgoalがないときやgoalを見失ったときどこに進めばよいか?
そんなときのために、自身の視界(目の悪さも含む即ち距離)に入るboids達の方向に進む設定を行いたいと思う。
さらに誰も視界に入らなかったときの設定は、次回にしたい。

まず、Cohesionの設定の有無を動画にしてみた↓
解かりやすくするため、ゴールの追従はなしにしている。


結果、いい感じだけど、メマトイのような感じになって気持ち悪くなった^^

今回は、ちょっと難しかった。
特に、どのように視界に入ったboidから合計平均した位置を取得するかに悩んだ。
ちっらっと、ナイスガイのデータをのぞき見た^^
ふむふむ、メモリを二つ使って再帰的にやっているね。


では、一旦それは置いといて、必要なデータをメモリに用意する。
用意と同時に、次サンプリング時に初期化されるようになっている。
次サンプリング時には、視界に入ったboidの合計位置は変化するから必ず必要である。p-countも0ね。


次に、ppassでall取得して、その個々を結ぶベクトルとベロシティの角度が○○度ならば、という条件で視界の入るboidの数とその合計位置を生成する。
メモリの使い方がナイス過ぎる。こういうの、なかなか考え付かないんだよな~。。勉強になる。
あと、角度計算するときのベクトルの向き重要!ここでいう、subtractionにinputするベクトル。


最後に、上記の合計平均位置へのベロシティを調整する。
ここの、ダイナミクスはこれまでやってきたように、boidのvelocityにSumPosへのvelocityをaddしていく。

 以上。

0 件のコメント:

コメントを投稿