algorithm - ramas - como dibujar un arbol seco
Algoritmo para dibujar árboles de manera eficiente (2)
Hay muchos buenos algoritmos para dibujar árboles, cada uno de los cuales muestra algunas propiedades diferentes de los árboles. Si desea mostrar una jerarquía, existe este código para WPF que dibuja jerarquías . Para una discusión más general sobre cómo dibujar gráficos y árboles, considere mirar estas diapositivas que detallan muchos de estos algoritmos. También hay estas excelentes diapositivas que cubren material similar.
¡Espero que esto ayude!
Necesito dibujar un árbol de estructura corporativa (algo así como un árbol genealógico) en C #. Todo el código auxiliar está allí. Es de color, interactivo y elegante. El único problema es que el algoritmo que realmente decide dónde colocar cada nodo me causa mucha pena.
Por el momento, las cajas tienen un tamaño de 100x50, y tengo una clase llamada StaffNode
que representa a un miembro del personal en una determinada coordenada x, y.
El algoritmo solo necesita crear una List<StaffNode>
con las x List<StaffNode>
apropiadas.
Esto es increíblemente complicado.
Básicamente, el algoritmo es recursivo a lo largo de la estructura corporativa, por lo tanto, izquierda-> derecha, luego arriba-> abajo a lo largo del árbol. Obviamente, es malo si dos nodos están uno encima del otro.
Puedo pensar en algunos algoritmos que pueden producir algo como esto:
*
o O
o o o o o O
o O O O O O
O
Mientras que algo como esto sería mejor, ya que el árbol es muy grande y el espacio es muy limitado:
*
o O
o o o o o O
o O O O O O
O
¿Alguno de ustedes tuvo que dibujar un árbol como este antes? Si lo tienes estoy seguro de que has encontrado los muchos obstáculos que tengo. ¿Algun consejo? Hasta ahora he pasado un día entero en él.
Podría usar un enfoque iterativo. Diseña el árbol usando algo como el primer ejemplo que usaste arriba. Luego mueva los nodos o subárboles más cerca uno del otro, mientras se asegura de que no se violen las restricciones (por ejemplo: los nodos no se pueden superponer, los nodos secundarios deben estar debajo de los nodos principales).
Pros:
- Algoritmo simple.
- Obtiene una solución lo suficientemente buena.
- Se puede aplicar continuamente a un árbol cambiante.
- Se puede hacer que se vea genial.
Contras:
- Puede necesitar muchas iteraciones para verse bien.
- Puede no encontrar la solución óptima (queda atrapado en un máximo local)