Aihepiiri: simulaatiot
Parvisimulaatio
Tee parvisimulaatio, jossa liikkuu käyttäjän valitsema määrä yksilöitä, esim. parvessa lentäviä lintuja. Ohjelma visualisoi lintujen liikettä graafisesti.
Lintujen liikkeiden kuvaamisen suhteen voit rajoittua kaksiuloitteiseen maailmaan kuvaamalla lintujen liikkeen ylhäältä päin. Lintuparvea on helppo simuloida antamalla kullekin linnulle kolme yksinkertaista sääntöä, joiden mukaan se valitsee kulkusuuntansa. Kun lintuja on useita ja ne toimivat samojen sisäisten sääntöjensä mukaisesti, niiden yhteistoiminta muistuttaa oikeiden lintujen parvikäyttäytymistä.
Seuraavia kolmea sääntöä voidaan käyttää tässä tehtävässä lintujen ohjaamiseen:
- vältä törmäilyä muihin lintuihin (Separation)
- lennä samaa nopeutta kuin muu parvi keskimäärin (Alignment) Tässä tapauksessa nopeus käsitetään vektorina, joka kertoo sekä suunnan että vauhdin.
- pyri kohti parven keskipistettä (Cohesion)
Luonnollisen käyttäytymisen saavuttamiseksi yllä esitettyjä sääntöjä kannattaa soveltaa edellä esitetyssä tärkeysjärjestyksessä. Kokeile yhdistellä ominaisuuksia laskemalla niitä yhteen eri painokertoimilla.
Huom! Aloita työ lukemalla Craig Reynoldin artikkeli "Steering behaviors for autonomous characters" http://www.red3d.com/cwr/steer/gdc99/.
Pyri toteuttamaan artikkelissa kuvattu "simple vehicle model" suhteellisen tarkkaan. Suuri osa tämän aiheen ongelmista liittyy siihen että jollain tavoin sovellettu malli ei tuotakaan haluttua käyttäytymistä.
Vaatimukset
Keskivaikea-vaativa
- graafinen käyttöliittymä
- simulaation alussa parven yksilöt ovat satunnaisessa liikkeessä
- mahdollisuus muuttaa sääntöjen painokertoimia (oletusarvoisesti ohjelma käyttää niitä kertoimia, joilla parvikäyttäytyminen on mahdollisimman luonnollisen näköistä)
- omia ominaisuuksia, kuten erityyppisiä alkutilanteita, mahdollisuus puuttua painokertoimiin simulaation kuluessa, tms.
VAROITUS : reaaliaikaisen simulaation toteutukseen tarvitset säikeitä (threads) niiden toimintaa esitellään luennoilla kurssiaikataulun mukaisesti
Lähteet
Sääntöjen toteutuksessa voit käyttää apuna Craig Reynoldsin ajatuksia ja muuta viitemateriaalia:
- http://www.red3d.com/cwr/boids/ Craig Reynoldsin ylläpitämä sivusto ja linkkikokoelma aiheesta.
Muutaman mainittujen linkkien takana piilevän termin selvennys:
- bird flock: lintuparvi
- fish school: kalaparvi
- boid: "lintu"