sto disegnando il profilo altimetrico che mostra l'elevazione guadagno/perdita lungo un sentiero, simile a quello qui sotto:(? Semplice) Label Placement per la Linea Grafici
Questo è fondamentalmente un grafico lineare con distanza dall'inizio sull'asse x e quota sull'asse y.
Mi piacerebbe fornire etichette di fantasia con altezze a punti in punti interessanti lungo il percorso, come quelli che ho aggiunto a mano all'immagine di esempio. Sto cercando idee sul modo migliore per mettere queste etichette in modo che:
- Essi non si sovrappongono tra loro
- Essi non si sovrappongono con il profilo stesso, o almeno questo accade in un modo pulito-looking (sembra che potrebbe essere necessario, nel bel mezzo di una ripida valle, per esempio)
- non si estendono al di fuori della scatola che limita l'immagine complessiva
per raggiungere questi obiettivi, immagino Posso (almeno):
- Capovolgere il testo intorno (vedi esempio)
- Scegliere lunghezze appropriate per i leader
- Scegli angoli appropriati per i leader (ma riducendo al minimo la variazione potrebbe essere auspicabile per ragioni estetiche)
- goccia punti quotati per meno importante posti in aree affollate
- nomi abbreviare in aree affollate (
PlaceName
s nel mio ambiente già supportano abbreviazione in un modo davvero piacevole, in modo da passare da "South Twin Mountain" a "S Doppia Mtn" è facile) - goccia less- importante a nnotations interamente in aree affollate
Ma io non so come meglio strutturare questo algoritmo. Sembra forse un problema di ottimizzazione? (Ridurre al minimo la puzza associata all'annotazione e fornire una penalità numerica per ciascuna delle cose che sto cercando di evitare?) Ma dal momento che ci sono un sacco di variabili discrete da ottimizzare e non mi interessa davvero il "migliore" soluzione (solo una buona, e preferibilmente stabile, una) non sono sicuro di cosa fare.
Come si avvicinano solitamente problemi di questo tipo nella grafica? Programmazione dinamica? Branch e legato? L'idea di ottimizzazione è fuori base? Ci sono delle librerie utili per .NET che potrei voler vedere?
(Non voglio cederlo a una libreria di disegno di grafici generale a titolo definitivo, perché è una caratteristica chiave del prodotto generale e ho in programma altre funzionalità personalizzate che potrebbero essere difficili da bloccare in uno scopo generale libreria di disegno grafico)
Come va? Hai trovato il miglior algoritmo? –
Alla fine ho optato per l'approccio di ricottura simulata (dopo aver lasciato questo progetto da parte per un po '). È stato abbastanza semplice da implementare, funziona piuttosto bene, e parti di esso possono essere riutilizzate per altre cose come l'etichettatura delle mappe e la selezione dei layout di pagina, anche prevedendo quali percorsi attraverso la rete di sentieri potrebbero essere buoni per l'escursione. –