Sto utilizzando un grafico Data.Graph per modellare una simulazione in Haskell. La simulazione è limitata a una griglia 2D che i miei modelli di grafico. Un nodo in ogni punto della griglia sottostante conterrà un tipo di Forse Molecola quindi potrebbe esserci una molecola presente o solo Nulla.Modifica/aggiornamento di grafici in Haskell
1 - 2 - 3
| | |
4 - 5 - 6
| | |
7 - 8 - 9
Ho creato questa rappresentazione, ma quando si tratta di aggiornare la posizione di una molecola sento che sto andando lungo modo per aggirare il problema. Quello che ho fatto finora è spogliato tutti i nodi in una lista di nodi. Ho scritto una funzione per scambiare i due elementi in questo elenco di nodi. Ma ora, quando arrivo a rimettere tutto a posto, mi capitano dei problemi perché per generare un nuovo grafico ho bisogno di un elenco di vertici che ottengo facilmente dalla funzione Graph dei vertici. Ma devo anche comprimerlo con l'elenco dei vertici che il bordo tocca. Sfortunatamente la funzione Graph di Data.Graph restituisce una lista di tuple di tipo Edge che non è immediatamente utile per generare un grafico per quanto posso vedere, anche se potrei scrivere una funzione per ricavare i vertici della lista che hanno i bordi su un vertice. Fare così sembra essere abbastanza lavoro per me da meravigliarsi mi manca il punto è lì una funzione grafica là fuori che fa solo prendere un grafico e restituire un grafico con un nodo aggiornato?
se utilizzo i grafici, è possibile vedere se i nodi adiacenti sono occupati da altre molecole per i controlli di rilevamento delle collisioni. – mikeyP
@mikeyP Ma puoi farlo anche con gli array, vero? –
Hai ragione, sotto un grafico c'è un array. Ma con un grafico sarò in grado di rimuovere nodi sul grafico, aree che le molecole non possono attraversare. Non riesco a vedere un modo pulito per farlo con gli array. – mikeyP