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 di un tipo di particella con un altro
descrive che cosa succede alla particella, e puo' essere
uno fra i seguenti valori:
repulsione, fusione, scissione.
Per difetto (cioe' se non specificato diversamente dall'utente),
l'esito dell'urto e' repulsione.
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.
Assegnare l'esito d'urto di un tipo di particella con un altro.
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.
Specificare manualmente o caricando da file esiti d'urto fra tipi di particelle presenti (incluso l'urto fra due particelle dello stesso tipo). Visualizzare gli esiti d'urto, modificarli.
Modificare dimensioni e temperatura dell'ambiente di lavoro. Aumentare le dimensioni e' sempre possibile, diminuirle non e' permesso nel caso vi siano particelle che vengono tagliate fuori dall'ambiente ridotto. Questo caso va gestito in modo opportuno.
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.