今回は、個々が独りぼっちにならないように結合(Cohesion)の設定を行う。
これまでの、boidの個々はgoalに向かうよう設定されているため、はぐれる事はない。
だがgoalがないときやgoalを見失ったときどこに進めばよいか?
そんなときのために、自身の視界(目の悪さも含む即ち距離)に入るboids達の方向に進む設定を行いたいと思う。
さらに誰も視界に入らなかったときの設定は、次回にしたい。
まず、Cohesionの設定の有無を動画にしてみた↓
解かりやすくするため、ゴールの追従はなしにしている。
結果、いい感じだけど、メマトイのような感じになって気持ち悪くなった^^
今回は、ちょっと難しかった。
特に、どのように視界に入ったboidから合計平均した位置を取得するかに悩んだ。
ちっらっと、ナイスガイのデータをのぞき見た^^
ふむふむ、メモリを二つ使って再帰的にやっているね。
では、一旦それは置いといて、必要なデータをメモリに用意する。
用意と同時に、次サンプリング時に初期化されるようになっている。
次サンプリング時には、視界に入ったboidの合計位置は変化するから必ず必要である。p-countも0ね。
次に、ppassでall取得して、その個々を結ぶベクトルとベロシティの角度が○○度ならば、という条件で視界の入るboidの数とその合計位置を生成する。
メモリの使い方がナイス過ぎる。こういうの、なかなか考え付かないんだよな~。。勉強になる。
あと、角度計算するときのベクトルの向き重要!ここでいう、subtractionにinputするベクトル。
最後に、上記の合計平均位置へのベロシティを調整する。
ここの、ダイナミクスはこれまでやってきたように、boidのvelocityにSumPosへのvelocityをaddしていく。
以上。
0 件のコメント:
コメントを投稿