Estoy tratando de ubicar las entidades visualmente para mostrar sus relaciones entre sí. Parece que el diseño gráfico automático, el algoritmo de primavera se adapte a mis necesidades. Me gustaría implementar esto en Silverlight usando C#, entonces estoy buscando ejemplos de código o enlaces a buenas explicaciones de la teoría. Cualquier ayuda apreciadaTeoría automática de la primavera del diseño gráfico
6
A
Respuesta
6
escribí algo de código hace un rato para realizar dinámico diseños de gráficos usando C# y XNA (fuente completa disponible a pedido).
Estas son algunas de las funciones críticas:
public void UpdateNodes()
{
for (int i = 0; i < nodes.Count; i++)
{
Vector2 netForce = Vector2.Zero;
foreach (Node otherNode in nodes)
{
if (otherNode != nodes[i])
{
netForce += CoulombRepulsion(nodes[i], otherNode); //calculate repulsion for all nodes
if (nodes[i].links.Contains(otherNode))
{
netForce += HookeAttraction(nodes[i], otherNode); //only calc attraction for linked nodes
}
}
}
nodes[i].Velocity += netForce;
nodes[i].Velocity *= .99f;
nodes[i].Position += nodes[i].Velocity;
}
}
public Vector2 HookeAttraction(Node node1, Node node2) //ON node1 BY node2
{
Vector2 direction = Vector2.Subtract(node2.Position, node1.Position);
direction.Normalize();
return hookeConst* node2.Mass * Vector2.Distance(node1.Position, node2.Position) * direction;
}
public Vector2 GravAttraction(Node node1, Node node2) //ON node1 BY node2
{
Vector2 direction = Vector2.Subtract(node2.Position, node1.Position);
direction.Normalize();
return gravConst * node2.Mass * Vector2.DistanceSquared(node1.Position, node2.Position) * direction;
}
escoger las dos constantes en base a la rapidez con que desea que el gráfico que converja. Utilicé estos:
private const float hookeConst = .000005f;
private const float gravConst = .00000001f;
Ese código es bastante autoexplicativo, pero no dude en preguntar si necesita algo. Básicamente, llame a la función UpdateNodes() en un bucle, y su gráfico convergerá en su estado de energía mínima.
1
No he usado ninguno de estos ejemplos, pero creo que te serán útiles.
- Silverlight diagramming with spring embedder layout [demo]
- Silverlight Bag of tricks
- A Silverlight graph visualizer (updated)
También hay una similar (duplicado?) Pregunta aquí: Graph visualisation in Silverlight
Cuestiones relacionadas
- 1. Teoría de gráficos: dividir un gráfico
- 2. primavera Gráfico Algoritmo w Nodo tamaño
- 3. Ocultación automática del diseño del reproductor multimedia en Android
- 4. Teoría del editor de texto
- 5. Teoría del almacenamiento en caché
- 6. Archivos de diseño de regeneración automática
- 7. La gran teoría unificada de manejar
- 8. (interactivo) gráfico como en la teoría de gráficos en una página web?
- 9. Aprendizaje de algoritmos de diseño gráfico
- 10. Componente de diseño de gráfico WPF
- 11. Consola o juego de diseño gráfico?
- 12. Lista de bibliotecas de C++ para la teoría de grafos
- 13. Eclipse Android Editor de diseño gráfico Broken
- 14. Cómo configurar la altura automática para el diseño extjs hbox?
- 15. ¿Cómo ocultar elementos en el diseño gráfico?
- 16. cómo especificar la posición y el diseño de una leyenda del gráfico JFreeChart
- 17. La ficha Diseño gráfico no aparece para algunos archivos de diseño en Eclipse
- 18. Recursos para aprender la teoría de categorías
- 19. En primavera, ¿puedo realizar la conexión automática de beans nuevos desde dentro de un bean autowired?
- 20. libro sobre la teoría de los sistemas de ficheros
- 21. Implementando la diferenciación automática para la 2da derivada: algoritmo para atravesar el gráfico computacional?
- 22. Requisitos previos para la comprensión de la teoría de Wavelet
- 23. REST Diseño de API para actualizar el gráfico de objetos
- 24. Buscando un marco de diseño gráfico para iOS
- 25. ¿Teoría de colas para programadores?
- 26. Consejos de diseño gráfico de iPhone para desarrolladores
- 27. la creación automática de directorios con la salida del archivo
- 28. Implementación del gráfico direccionado
- 29. Eliminando línea del gráfico
- 30. Git: extracción automática del repositorio?
Solo una nota: que "nodos [i] .Velocity * = .99f;" es una constante de amortiguación para hacer que su gráfico converja más fácilmente. Disminuya ese valor por menos "elasticidad". –
Me gustaría que la fuente ... [email protected] –
seguro, aquí está (como un proyecto comprimido): http://staff.arson-media.com/preetum/uploads/springForceV0.zip Tenga en cuenta que escribí este código * bastante * hace un tiempo, por lo que hay algunas regiones innecesariamente ofuscadas (como la región marcada como "mouseStuff" en el ciclo de actualización). Sin embargo, todos los componentes importantes están presentes y son funcionales. (También hay algo de interactividad con el mouse) –