4. Boidy.
Transkrypt
4. Boidy.
4. Boidy. Modeklując rzeczywistość, chcielibyśmy zaprojektować stukturę która będzie wykonywać określoną czynność. Jeżeli model ten reprezentowany jest przez jednego osobnika, wówczas podajemy wszystkie niezbędne parametry, które określą sposób zachowania tego osobnika. Załóżmy, że chodzi nam o stworzenie modelu graficznego, który będzie przedstawiał osobnika w ruchu. Wówczas określimy min. wielkość osobnika, obszar po którym się będzie poruszał, prędkość, trajektorię ruchu. Załóżmy jednak, że chcielibyśmy stworzyć model, w którym będą się poruszały grupy osobników. Określenie parametrów ruchu wszystkich osobników musi zawierać parametry ruchu dla każdego osobnika. Ponadto musi zawierać pewne reguły zachowania jednego osobnika w stosunku do pozostałych. W tym przypadku modelujemy zachowanie grupy osobników, nie zaś jednego osobnika. Możemy więc określić rguły w taki sposób, by bez względu na liczbę osobników realizowały żadane zagadnienie (w tym przypadku ruch grupy osobników). Takie zagadnienie modelujące zachowanie ”stada” osobników nazywamy boidami. Przjmijmy pewne nazewnictwo oraz określmy ogólne reguły poruszania się osobników. Niech w rozważanym przez nas modelu stado osobników będzie stadem boidów. Boidy mogą poruszać się tylko w wyznaczonym obszarze. Boid poruszając się musi zachować odległość (Przez odległość rozumie się kulę o środku w środku bojda i ustalonym promieniu. Jeżli boidy są zobarazowane w fromie animacji w R2 , a boid jest kołem o promieniu r, to średek boida x0 , y0 jest środkiem kuli, zaś odległość jest kulą o środku x0 , y0 i promieniu r + 2.) od innych boidów. Boidy poruszają się w wyznaczonym kierunku. Może nim być środek grupy, inny boid, pewien obszar lub opisana fukcją trajektoria ruchu. Zaprojektujmy omawiany model w formie animacji w R2 . Niech pojednynczy boid będzie kula o śrdku w punkcie x0 , y0 i promieniu r. Omówimy zasady, jakimi należy się kierować projektując boidy. Zasady wykorzystywane przy projektowaniu boidów. 1. Obszar, w którym poruszają się boidy. Projektując animację grupowego zachowania osobników należy ustalić obszar, w którym te osobniki będą się poruszały. Może to być obszar ograniczony pewną figurą mniejszy od wielkości ekranu, lub inny większy obszar (niekoniecznie ograniczony), w którym będą poruszać się boidy. W pierwszym przypadku wszystkie osobniki są widoczne. W dugim - należy umożliwić obserwowanie wybranej części obszaru. 2. Prędkość i kierunek ruchu. Założyliśmy, że w naszym przypadku boid jest kulą o środku x0 , y0 i promieniu r. Aby określić prędkość i kierunek ruchu należy uwzględnić położenie osobnika, gdyż przez prędkość boida będziemy rozumieli zmianę położenia boida w jednostce czasu, zaś kierunek będzie wy1 znaczony przez nowe położenie boida. Zatem określenie prędkości i kierunku ruchu będzie polegało na wyznaczeniu współrzednych boida po upływie jednostki czasu. (Załóżmy, że poruszamy się o stałą odległość w pojedynczym ruchu. Pedkość boida będzie tym większa, im mniejsza jednostka czasu, co którą zmienia się położenie boida.) 3. Podążanie do celu. W przypadku, gdy ruch boida polega na dążeniu do celu (ustalonego punktu w obszarze, w którym poruszają się boidy), mamy z góry wyznaczony kierunek ruchu. Jest nim prosta łącząca boida z celem, do którego dąży ( a dokładnie prosta łącząca punkt x0 , y0 ze środkiem clu). W tym przypadku należy więc określić prędkość, z jaką będzie się poruszał boid. Możemy przyjąc, że w miarę zbliżania się do celu prędkość boida musi maleć. Jest to konieczne do precyzyjnego osiągnięcia celu. Zmniejszenie prędkości będzie wymagało zmniejszenia długości pojedynczego kroku. Należy zauważyć, że cel do którego dązymy nie musi być statyczny. Może nim być np. inny boid, który jest w ruchu. Wówczas punktem odniesienia jest położenie ”boida – celu” w danym momencie. 4. Odległość między boidami. Ponieważ mamy doczynienia z ruchem grupy osobników należy uwzględnić relacje między nimi. Chcemy, by poszczególne boidy nie nachodziły na siebie. Takie żądanie jest zgodne z zasadami ruchu w rzezczywistym świeci. Jeżeli bowiem mamy ruch w przestrzeni jakiś ciał to mogą się one co najwyżej zderzyć. Aby uwzględnić tę zasadę należy przyjąć, że w pewnej (ustalonej odległości) od boida nie może znajdowaćsię inny boid. Realizacja tego założenia może polegać na analizowaniu ruchu. Wystarczy sprawdzić, czy nowe położenie boida nie będzie w obszarze, w którym już znajduję się inny boid. Jeśli tak jest, należy np. zmniejszyć prędkość boida. 5. Omijanie przeszkód. Wyróżniamy dwa rodzje przeszkód. Mogą nimi być inne bojdy lub ciała stałe, np. krawędź pola, ściana. Jeśli przeszkodami są bojdy – należy zmniejszyć prędkość; jeśli przeszkodą jest np. ściana – należy zmienić kierunek ruchu. (Trzeba tu pamiętać o ustaleniu odległości, po osiągnięciu której omijamy przeszkodę.) 6. Podążanie wyznaczoną ścieżką. Od boidów możemy żadać, by poruszały się ustaloną scieżką. Przez ścieżkę rozumiemy obszar w określonej odległości od pewnej funkcji; tzn. istnieje linia, która mówi, że boidy mają się poruszać tylko wzdłuż tej linii w określonej odległości od niej. Linia ta może przebiegać przez obszar poruszania się boidów; może również być linią brzegową tego obszaru. Drugi przypadek oznacza, że boidy mają poruszać sie w pewnej odległości od brzegów obszaru. Kilka przykładów i ilustrujących je apletów można znaleźć na stronie: htttp://www.red3d.com/cwr/steer/ Zadanie Należy napisać program ilustrujący zachowanie boidów. Urzytkownik podaje liczbę boidów oraz sposób poruszania się. Należy przewidzieć trzy sposoby poruszania się: 2 1. Do celu statycznego. Wówczas urzytkownik podaje współrzędne celu. 2. Do celu dynamicznego. Jest nim jeden boid, który porusza się w losowo zmieniającym się kierunku. 3. Wzdłuż krawędzi obszaru. Obszar okrśla programista. Początkowe położenie boidów i ich początkowa prędkość są losowe. 3