estoy dibujando perfiles de elevación que muestran la elevación de ganancia/pérdida a lo largo de un sendero, similares a la de abajo:etiqueta (? Simple) Colocación de gráficos de líneas
Esto es básicamente un gráfico de líneas con distancia desde el inicio en el eje xy elevación en el eje y.
Me gustaría proporcionar etiquetas elegantes con elevaciones puntuales en puntos interesantes a lo largo del camino, como las que he agregado a mano a la imagen de muestra. Estoy en busca de ideas sobre la mejor manera de colocar estas etiquetas para que:
- que no se solapen entre sí
- que no se superpongan con el perfil en sí, o por lo menos esto sucede en una modo de aspecto limpio (parece que podría ser necesario en el medio de un valle, por ejemplo)
- no se extienden fuera de la caja que limita la imagen global
para lograr estos objetivos, calculo Puedo (al menos):
- Voltear el texto alrededor (ver ejemplo)
- Elija longitudes apropiadas para los líderes
- Elija ángulos apropiados para líderes (pero minimizando la variación podría ser deseable por razones estéticas)
- gota cotas para menos importante lugares en las zonas muy pobladas
- nombres aBREVIE en las zonas muy pobladas (s
PlaceName
en mi entorno ya soportan abreviatura de una manera muy agradable, por lo que el cambio de "Twin montaña del sur" a "s doble MTN" es fácil) - gota menos- importante a nnotaciones completamente en áreas concurridas
Pero no sé cómo estructurar mejor este algoritmo. Parece un problema de optimización tal vez? (¿Minimizar el apestoso asociado con la anotación y proporcionar una penalización numérica para cada una de las cosas que trato de evitar?) Pero dado que hay muchas variables discretas para optimizar y realmente no me importa lo "mejor" solución (solo una buena, y preferiblemente estable) no estoy seguro de qué hacer.
¿Cómo se suelen abordar problemas como este en los gráficos? ¿Programación dinámica? ¿Sucumbir y atado? ¿La idea de optimización está fuera de lugar? ¿Hay alguna biblioteca útil para .NET que pueda interesarme?
(No quiero ceder esto a una biblioteca general de dibujo de gráficos, ya que es una característica clave del producto en general y tengo algunas características más personalizadas planificadas que pueden ser difíciles de meter en un propósito general graph-drawing library)
¿Cómo te va? ¿Encontraste el mejor algoritmo? –
Terminé yendo con el enfoque de recocido simulado (después de dejar este proyecto de lado por un tiempo). Fue bastante simple de implementar, funciona bastante bien, y partes de ella se pueden reutilizar para otras cosas como etiquetar mapas y seleccionar diseños de página, e incluso predecir qué rutas a través de la red de senderos pueden ser buenas para caminar. –