Flocking e Simplex Noise
Esempio molto basilare di flocking, ossia di agenti che si muovono in modo apparentementre ordinato, come un insieme di animali (gregge, stormo, branco, quello che preferite). Nel caso specifico, il risultato di ordine apparente si ottiene con tre regole molto semplici per il movimento degli agenti: separazione, allineamento e coesione.
La separazione indica la distanza che deve essere mantenuta tra un agente e l'altro e impone agli agenti di virare se si avvicinano troppo agli altri. L'allineamento indica la direzione da mantenere in rapporto ai vicini e impone agli agenti di correggere la rotta se il loro angolo cambia troppo rispetto al limite stabilito. La coesione indica la tendenza a mantenersi in mezzo al proprio gruppo e impone agli agenti di virare verso il centro dell'agente più vicino, se si allontanano troppo.
Ogni agente applica queste regole in relazione soltanto ai propri vicini, ma il risultato finale è una simulazione piuttosto realistica (o almeno accettabile) di un gruppo di animali che si muovono assieme.
Per rendere più dinamiche le regole, ho usato Simplex Noise per generare di volta in volta i valori minimi da mantenere per ognuno dei tre fattori indicati sopra, combinato a MersenneTwister come generatore di numeri pseudocasuali. Il risultato è quello che potete vedere, nel bene o nel male.