CAAD
http://foro.caad.es/

[graphviz] Crear "mapas".
http://foro.caad.es/viewtopic.php?f=9&t=5241
Página 1 de 1

Autor:  dddddd [ 22 May 2012 16:47 ]
Asunto:  [graphviz] Crear "mapas".

Durante la fase de documentación para el llamado "Proyecto Orfeo", hemos hecho una toma de contacto a dos obras anteriores que tocaban el mito, como forma de acercamiento lúdico al mismo (aunque la idea del proyecto no es recrear el periplo de Orfeo).

En la obra de grendelkhan hay un par de laberintos y a algún compañero no le hacen ni pizca de gracia. Tras no obtener información fiable y clara sobre la resolución del laberinto, les pasé unas notas, esperando que fuera suficiente, pero me quedé con ganas de hacer algo más gráfico y completo aprovechando que lo tengo mapeado en papel (con cierta belleza, pero bastante personal).

Lo primero que me vino a la cabeza fue Graphviz, que he usado recientemente con Notxor para otro tema que no viene a cuento. Graphviz permite crear gráficas complejas, de diferentes tipos. Dada la estructura "ilógica" del laberinto, me pareció bien dejar al propio programa que se encargara de definir la distribución de los elementos, liberándome de esa pesada tarea.

Graphviz tiene un montón de visores y editores. El gráfico más básico posible (sin utilizar propiedades espaciales, colores, agrupamientos ni un sin fin de características del lenguaje dot) es algo como:

Código:
digraph DesiertoOrfeoGrendel{
rio -> camino [label=norte];
camino -> sol_a [label=norte];
camino -> sol_b [label=este];
charco -> sol_b [label=norte];
charco -> sol_a [label=oeste];
arbol -> desfiladero [label=norte];
arbol -> sol_b [label=sur];
arbol -> sol_a [label=este];
desfiladero -> arbol [label=sur];
desfiladero -> sol_a [label=norte];
hondonada_a -> charco [label=norte];
hondonada_a -> sol_a [label=oeste];
hondonada_a -> sol_b [label=este];
hondonada_a -> sol_c [label=sur];
sol_a -> desfiladero [label=norte];
sol_a -> arbol [label=oeste];
sol_a -> hondonada_a [label=este];
sol_b -> sol_b [label=este];
sol_b -> sol_b [label=sur];
sol_b -> hondonada_a [label=norte];
sol_c -> sol_c [label=norte];
sol_c -> charco [label=oeste];
sol_c -> hondonada_a [label=norte];
sol_c -> hondonada_a [label=sur];
sol_c -> sol_b [label=este];
}

Para crear una imagen, por ejemplo png (salvo que tengáis un visualizador directo), suponiendo que el anterior código lo hemos introducido en un fichero llamado input.dot:
Código:
dot -Tpng -o output.png input.dot

En vez de dot (el comando, primera palabra en la linea anterior), se puede probar con alguno de los restantes "renderizadores" (filtros en su argot) de graphviz:
Citar:
dot - filter for drawing directed graphs
neato - filter for drawing undirected graphs
twopi - filter for radial layouts of graphs
circo - filter for circular layout of graphs
fdp - filter for drawing undirected graphs

Los más decentes para este caso, dot y circo.

La sintaxis es sencilla, y las posibilidades son bastantes. Puede que, en un momento de procrastinación, haga algún sencillo script para generar los dot de forma más intuitiva.

Página 1 de 1 Todos los horarios son UTC + 1 hora
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/