In questo articolo esploreremo come funziona il lato del codice che deve generare il grafo che rappresenta il luogo da mappare
Cosa fa il codice?
Il codice in questione è incaricato di prendere dei dati sul luogo da mappare (punti di interesse e le loro connessioni), trovare il tragitto più corto tra ogni coppia di punti scriverli in un file .json che potrà poi essere usato dal sito per dare informazioni all’utente su dove andare.
Lo script può leggere sia dalla console, il metodo di input standard, oppure anche da file se è specificato come primo argomento al comando, una volta scelto il metodo di input il programma leggerà tutte le linee fino a che non trova il terminatore “!” a questo punto si salva i nomi dei nodi e inizia a leggere nuovamente tutte le linee presenti prima del secondo “!”, queste sono le varie connessioni tra nodi specificate nel modo "nodo1 nodo2 distanza"
, la distanza qui è necessaria per permettere al programma di individuare correttamente il tragitto più corto e non solo il tragitto che attraversa meno nodi.
L’algoritmo per trovare il tragitto più corto è abbastanza semplice, si basa tutto su degli agenti che attraversano il nostro grafo tenendo a mente ove sono stati e quanta distanza hanno percorso, funziona così : iniziamo con un agente all’inizio, per ogni nodi connesso creiamo un altro agente su quel nodo che si terrà a mente di non tornare alla posizione precedente o alle posizioni precedenti dell’agente da cui è nato. Quando un agente arriva alla fine se la distanza che ha trascorso è minore della miglior distanza salvata l’agente salva il suo tragitto in una lista altrimenti non fa niente e si cancella, questo continua fino a che ci sono agenti nel grafo e poi ridà il tragitto più corto.
Dopo ciò basta scrivere nel file “nodi.json” un nodo specificato come :
nome_nodo1 : {
nodo2 : tragitto_migliore,
nodo3 : tragitto_migliore,
},
Poi questo file può essere passato al sito per creare una mappa.
La versione grafica
“Ma io non voglio spendere ore della mia vita a inserire nodi nella console, non c’è un’alternativa?”
-Voi, probabilmente
Certo che c’è un’alternative e si chiama “DaVinciCreate.love”, è un progetto che usa il game engine LÖVE2D, solitamente usato per creare giochi ma va bene anche per i nostri scopi. Appena si lancia il programma si noterà un immagine come sfondo, questa è l’immagine nota come “ospedale.jpeg”, se si vuole usare un’altra immagine come sfondo basta rimpiazzare “ospedale.jpeg” con l’immagine gradita e rinominarla “ospedale.jpeg”.
Una volta scelta l’immagine si può muovere la visuale muovendo il mouse e tenendo schiacciato il suo pulsante centrale. Per piazzare un nodo basta premere il pulsante sinistro e poi scrivere il nome del nodo, se al nodo non viene dato un nome automaticamente diventerà “IND-” seguito da un numero univoco per identificarlo, se si schiaccia due volte velocemente su un nodo esso verrà cancellato. Si può spostare un nodo trascinandolo col mouse, per connettere due nodi si schiaccia il primo con il pulsante destro due nodi, a questo punto saranno connessi con una linea e ci sarà un piccolo numero in mezzo ai due che indica la loro distanza.
Una volta fatto il grafo si può schiacciare il pulsante “Solve” in alto a sinistra che creerà automaticamente un file che poi verrà usato dalla versione non grafica per creare un altro “nodi.json”.
L’intero codebase è disponibile su github:
Lascia un commento