Zadaniem programu jest demonstracja grupowego zachowania osobników - ptaków w kluczu. Każdy osobnik kieruje się prostymi regułami o zasięgu lokalnym, nie wiedząc jednocześnie nic o zachowaniu grupy jako całości. Zachowanie całej grupy staje się w efekcie złożone.
Rys.1. Klucz
Każdy osobnik podąża wg następujących zasad:
Separacja - Jeżeli jakikolwiek inny osobnik jest zbyt blisko, skręć aby uniknąć kolizji.
Wyrównanie - Wyrównaj kierunek swojego lotu do kierunku najbliższych sąsiadów.
Spójność - Steruj w stronę środka ciężkości grupy najbliższych sąsiadów.
Zasady symulacji
Każdy osobnik modyfikuje swoje zachowanie w oparciu o obserwację trzech sąsiadów:
lewego sąsiada,
lidera – najbliższego osobnika przed nim,
prawego sąsiada.
Rys. 2. Sąsiedzi osobnika
Jeżeli osobnik nie posiada sąsiadów, staje się liderem grupy, zachowując zadany kierunek lotu. W ten sposób grupa jako całość posiada zawsze pewne ukierunkowanie i można obserwować zachowanie osobników w jej wnętrzu. Takie założenie wynika bezpośrednio z obserwacji natury – osobniki prowadzące kierują się dodatkowymi bodźcami, dzięki czemu wiedzą, jaki zachowywać kierunek lotu. Wpływ tych bodźców nie jest istotny dla celów symulacji zachowania grupowego.
Implementacja
Przebieg symulacji: Dla każdego osobnika X wykonaj:
Wyszukaj najbliższych sąsiadów osobnika X. Wybierany jest najbliższy osobnik z przodu - w stożku (-45deg,45deg) w stosunku do wektora prędkości, lewy - w stożku (-135, -45) oraz prawy - w stożku (45, 135).
Zastosuj zasadę wyrównania. Wyznacz średni wektor kierunkowy na podstawie wszystkich sąsiadów. Następnie skieruj wektor prędkości w stronę obliczonej średniej sąsiadów, aby jego prędkość po obliczeniach nie zmieniła się.
Zastosuj zasadę spójności. Wyznacz środek ciężkości sąsiadów osobnika. Oblicz wektor będący różnicą mięcy celem a aktualną pozycją. Dodaj ten przeskalowany wektor do przeskalowanego wektora prędkości osobnika (new_v = (1 - wsp) * old_v + wsp * diff). W ten sposób osobnik jest w stanie poruszać się zarówno w boki jak i w przód i tył.
Zastosuj zasadę separacji. Znajdź najbliższego z sąsiadów. Jeśli odległość od niego jest mniejsza niż zadany próg krytyczny, obróć wektor prędkości (skręć) w stronę przeciwną do położenia danego sąsiada.
Unikaj kolizji z kursorem myszy w ten sam sposób, jaki wykonywała to separacja.
Przeskaluj prędkość, jeśli przekracza maximum lub minimum.
Przemieść osobnika zgodnie z wektorem prędkości.
Opcje programu
Kontrola
Restart
Uruchamia symujację ponownie. Pozycje początkowe ptaków losowane są na nowo.
Stop/Start
Zatrzymuje/wznawia symulację.
Następna klatka (+)
W przypadku zatrzymanej symulacji, wykonuje kolejny krok i przerysowuje ekran.
Opcje podstawowe
Ilość ptaków
Zmienia ilość ptaków w kluczu.
Maksymalna/minimalna prędkość.
Ustawia limity prędkości ptaków.
Kroków na klatkę
Pozwala na zwiększenie ilości kroków symulacji na każdą wyrenderowaną klatkę obrazu.
Zaawansowane
Separacja
Włącza/wyłącza zasadę separacji.
Odległość kolizijna
Odległość od której ptak zaczyna zmieniać kierunek lotu.
Obrót przy kolizji
Wielkość obrotu w momencie zbliżania się do przeszkody.
Wyrównanie
Włącza/wyłącza zasadę wyrównania.
Siła wyrównania
Zmienia siłę wpływu kierunków sąsiadów na kierunek danego osobnika.
Spójność
Włącza/wyłącza zasadę spójności.
Siła wyrównania
Zmienia siłę wpływu położenia sąsiadów na ruch osobnika.
Ucieczka od kursora
Włącza/wyłącza ucieczkę od kursora.
Zasięg kursora
Odległość od kursora, od której ptak zaczyna zmieniać kierunek lotu.
Obrót przy ucieczce
Wielkość obrotu w momencie zbliżania się do kursora.