Programmazione

Sezione sulla programmazione Object Oriented in C++, C#, e Java

Simulatore Folle in Movimento

::cck::31::/cck::
::introtext::

Questo Articolo, in lavorazione ancora, illustra un progetto di "Simulatore di folle in movimento" utilizzabile per studiare e verificare comportamenti emergenti in folle in movimento all'interno di strutture architettoniche con vie di fuga più o meno idonee a gestire eventi critici o situazioni di panico.

Il Simulatore in fase di sviluppo è scritto in C# e adotta algoritmi di cammino minimo su Grafi per selezionare i percorsi ottimi che i camminatori tentano di seguire e di programmazione ad agenti software per rendere la simulazione realistica in quando non viene programmata la folla, ma il singolo camminatore la cui interazione con i singoli comportamenti degli altri camminatori farà emergere il comportamento osservabile della entità folla.

 

Nel seguito dell'articolo il link della beta utilizzabile direttamente dal tuo browser.

Anteprima 

screenShotSimulatore2

AVVIA Simulatore Folle buttonPlay

 

::/introtext::
::fulltext::
Due Video Demo dello studio del simulatore:

 

Rapida guida agli elemententi della GUI del simulatore.

managerFollaGui

La GUI ManagerFolla è l'interfaccia che permette di creare una folla che sgorga da un punto di origine e si sposta verso un punto di fuga.

Puoi settare il numero dei Camminatori da qui, e dire se all'arrivo devono ripartire o eliminarsi.

 

Ogni camminatore nella simulazione può mostrare la sua Interfaccia grafica (Per ottimizzare le prestazioni ho scelto che vi sia una sola istanza per volta della GUI per ogni camminatore selezionato).

Per visualizzare la GUI di un camminatore occorre cliccarlo con il tasto destro.

La Gui mostra al momento poche informazioni. Il numero di urti che potra essere poi eleborato per stabilire se la struttura architettonica nella quale la folla fuggiva o si muoveva era idonea e fino a che volume di folla.

Velocità del camminatore calcolata con il prodotto scalare del vettore di velocità x,y,z per il vettore locale di orientamento frontale (il front è l'asse z locale):

float velocita = dot(camminatore.velocitàXYZ,camminatore.frontXYZ);

Distanza dall'arrivo è ottenuta con la magnitudo del vettore di posizione destinazione meno il vettore di posizione del camminatore.

Ogni Camminatore ha una "camera" per vedere localmente l'ambiente ma per motivi di prestazioni sono tutte disabilitate tranne quella usata per mostrare il punto di vista nella GUI del camminatore (se aperta).

CamminatoreGui

 

Qui puoi avviare e usare il simulatore on line. 

 

AVVIA Simulatore Folle  buttonPlay

 

screenShotSimulatore1

 

Architettura software della classi e dei sorgenti

Le classi C# realizzate hanno una architettura scalabile e sono in gradi di comunicare tra di loro ma anche essere usate singolarmente.

Fondamentalmente ho creato due oggetti fondamentali poi dotadi di più classi al loro interno.

Partirei dal descrivere l'oggetto Camminatore che si occupa di definire e  implementare il comportamento del singolo camminatore di una folla.

Ho scritto la classe Camminatore.cs che gestisce il grafo orientato ottenuto dalla scena 3D che definisce archi e vertici sui quali il camminatore cerca e usa i percorsi minimi da una sorgente a una destinazione.

Il camminatore può opzionalmente avere una GUI, tale interfaccia grafica l'ho scritta mediante la classe GUICamminatore.cs che ha una relazione uno a uno.

Il camminatore può avere qualsiasi forma, da un bipede a un robot con zampe a una veicolo, quindi una ulteriore classe deve gestire la mesh 3D, e le sue animazioni scheletriche o IK. In questo caso che ho implementato una class per la gestione della mesh bipede e le sue animazioni chiamata CamminatoreAnimationController.cs che in base alla velocita del caminatore lo anima per camminare, correre o stare fermo e in base al numero di urti lo anima per metterlo "KO". Per quanto riguarda le animazioni collegate al movimento del camminatore e alla mesh di tipo skin deformabile, ho definito una semplice macchina a stati finiti che mappa gli stati del caminatore, come nella figura seguente:

 

statiCamminatore 

blendTree

 

Le animazioni sono gestite dalla struttura SK sottostante la mesh deformabile.

 

characterSk

characterAnterpima

Il secondo oggetto fondamentale è il manager della folla, implementato nella classe ManagerFolla.cs che ho scritto pensandolo come un emettitore di particelle più evoluto.

Ha una lista concatenate nella quale vengono memorizzati i puntatori ai singoli camminatori della folla. Tale lista ha una dimensiona pari al numero settato dall'utente e viene gestista in modo ottimizzato per accedervi in una complessità asistotica che è al più O(n).

Anche il manager folla ha una gui implementata separatamente in conformita alla best practice della programmazione O.O. in particolare nel modello "Vista Controller" dove appunto il codice di un oggetto va separato dal codice della sua interfaccia in modo da scrivere classi più pulite ed eleganti.

La GUI nella classe GUIManagerFolla.cs si limita quindi a invocare i metodi pubblici della classe ManagerFolla.cs passandogli i paramentri impostati dall'utente o invocando i lister in ascolto sui vari eventi realizzati.

Attualmente sto acnora scrivendo metodi e funzioni per i camminatori per sofisticare il loro comportamento per produrre simulazioni più realistiche.

Sono in cantiere altri oggetti che potranno essere usati nelle prossime versioni del simulatore per elaborare dati come il flusso di camminatori lungo in dato percorso, il tempo impiegato a spostarsi lungo un dato percorso (o sub percorso) per evidenziare punti critici ecc. E altri oggetti ancora.

 

::/fulltext:: ::cck::31::/cck::

Comments powered by CComment

© 2018 sito prototipale studio di GiuseppeGi