L'applicazione e' di (simil-)chimica.
Scopo: Realizzare un'interfaccia per un simulatore del comportamento di un insieme di particelle.
Abbiamo un insieme di particelle che si muovono in un'ambiente di lavoro. Ogni particella ha un raggio e un vettore velocita'.
Consideriamo una rappresentazione bidimensionale. L'ambiente di lavoro e' un rettangolo, le particelle sono cerchi.
Durante il moto, due particelle possono entrare in collisione. Allora (a seconda del tipo di particelle coinvolte) puo' accadere una delle seguenti cose:
L'utente puo' variare la temperatura dell'ambiente di lavoro, che
incide sull'intensita' delle velocita' delle particelle.
E puo' specificare attrattori, cioe' forze
che modificano la direzione delle velocita' attraendole verso un punto.
Il programma che implementa l'applicazione viene dato a scatola chiusa e contiene una serie di strutture dati ed operazioni che l'interfaccia puo' utilizzare, senza modificarle.
Il programma applicativo contiene al suo interno le strutture dati per rappresentare:
Un tipo di particella e' descritto da:
L'esito dell'urto tra due tipi di particelle
puo' essere uno fra i seguenti valori: repulsione, fusione.
Una singola particella e' descritta da:
L'ambiente di lavoro e' descritto da:
Il programma applicativo fornisce funzioni per:
Inizializzare lo spazio di lavoro, leggere e modificare le sue
informazioni.
Inizialmente lo spazio di lavoro ha dimensioni fissate,
temperatura 0 gradi, nessuna tipo di particella conosciuto
e nessuna particella presente.
Creare / eliminare un tipo di particella, leggere e modificare le sue informazioni.
Creare / eliminare una particella, leggere e modificare le sue informazioni.
Posizionare (in modo casuale)
un insieme di particelle in una sotto-parte dell'ambiente di lavoro.
La sotto-parte e' rettangolare, puo' coincidere con tutto l'ambiente di
lavoro. Al momento in cui si chiama la funzione, la sotto-parte deve
essere vuota.
E' possibile specificare fino a tre tipi di particelle e la percentuale
reciproca.
Esempio:
Genera 40% di particelle di tipo A e 60% di tipo B in sotto-parte
di diagonale (10,10) - (130,70).
Svuotare una sotto-parte dell'ambiente di lavoro dalle particelle presenti.
Ottenere tutte le particelle presenti nell'ambiente di lavoro.
Modificare le velocita' di tutte le particelle mediante un attrattore.
Un attrattore e' un punto oppure un lato dell'ambiente di lavoro.
Ha associata una percentuale di attrazione.
Tutte le velocita' tenderanno a convergere verso l'attrattore.
La convergenza e' proporzionale alla percentuale di attrazione.
Esempi:
100% = le velocita' si dirigono a puntare esattamente verso l'attrattore,
50% = ruotano di meta' dell'angolo che sarebbe necessario a puntare
direttamente verso l'attrattore ecc.
Avanzare di un'unita' di tempo nella simulazione. Tutte le eventuali collisioni sono gestite internamente dall'applicazione.
L'interfaccia deve usare il programma applicativo a scatola chiusa, senza modificarli. Deve fornire all'utente strumenti per compiere le seguenti operazioni:
Immettere manualmente o caricare da file nuovi tipi di particelle. Visualizzare i tipi di particelle presenti. Cancellare o modificare tipi di particelle.
Visualizzare gli esiti d'urto.
Modificare la temperatura dell'ambiente di lavoro.
Agire sull'insieme di particelle presenti nell'ambiente di lavoro. L'utente puo' riempire l'intero ambiente di una miscela di particelle di fino a tre tipi diversi (fra quelli presenti) in percentuali assegnate. Puo' riempire anche sotto-aree dell'ambiente di lavoro. Puo' inserire particelle singole in punti specificati. Puo' cancellare particelle individualmente oppure specificando sotto-aree che devono essere svuotate.
Visualizzare la situazione corrente delle particelle (posizioni e, a richiesta dell'utente, velocita'). Spostare una particella, modificare la direzione della sua velocita'.
Modificare le direzioni delle velocita' di tutte le particelle presenti (o di quelle di un dato tipo) mediante un attrattore. L'attrattore puo' essere un punto all'interno dell'ambiente di lavoro oppure un lato dell'ambiente di lavoro.
Eseguire la simulazione in animazione continua (con velocita' controllabile dall'utente), con possibilita' per l'utente di stabilire pause a comando oppure pause automatiche ad intervalli di tempo stabiliti (ogni tot unita' di tempo).
Tutte le operazioni
possono essere eseguite all'inizio o durante qualsiasi pausa della
simulazione.
La simulazione deve poi riprendere dalla situazione in cui si era
fermata, con le modifiche apportate dall'utente.
La visualizzazione deve riflettere in ogni momento
lo stato corrente della simulazione.