Ir al contenido


Foto

Alguna idea para crear un diagrama o grafico de relacion de personas?


  • Por favor identifícate para responder
5 respuestas en este tema

#1 erikmx

erikmx

    Member

  • Miembros
  • PipPip
  • 48 mensajes

Escrito 26 julio 2013 - 04:39

Buen dia a todos, me surgio la necesidad de crear un grafico de relacion de usuarios en mi trabajo, he visto software comercial pero la verdad es extremadamente costoso, y no hay presupuesto, por eso me toco la tarea de ver si es posible hacerlo sin necesidad de adquirir un producto de estos.

La idea es la siguiente:

Tengo una base de datos con personas, cada una de estas se le asigana un codigo o cadena para hacerlo unico independientemente de los nombres y apellido, hay otra tabla que almacena a sus parientes o conocidos que indico, a estos tambien se les genera un ID unico pero se relaciona con el principal con el otro ID, bueno hasta ahi no hay problema si hago una consulta puedo ver los registros sin mas, el problema surge para ver de forma grafica si existen conexion con otros usuarios registrados.

Lo que se pretende hacer es crear es un nodo con la persona y esta a su ves que muestre enlazado por una linea los nodos de sus conocidos algo como anexo en la imagen de muestra. Cada registro tiene la imagen del usuario, familiares y conocidos que proporciona.

La verdad no se bien por donde comenzar agradecere cualquier ayuda y sugerencia, saludos

Imagen Enviada
  • 0

#2 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 29 julio 2013 - 04:46

Lo que quieres hacer, así en general, es muy complicado, porque tienes que evitar que las líneas pasen sobre otras personas y esas cosas.

La solución "general" pasa por usar física: las personas son objetos con pesos, unidas por elásticos que tiran de cada uno e intentan unir a los conectados, y luego los elásticos repelen a los que no conectan... vas añadiendo personas, y el sistema físico los va moviendo y terminan poniendose donde menos "estiradas" queden las gomas y sin taparse entre ellos. Es complicado como ves.

Soluciones más sencillas las hay: Pon todas las personas en un circulo, y así las líneas nunca pasan por encima de terceras personas (es la solución más usada, polígonos regulares de n lados con n = número de nodos).
  • 0

#3 Delphius

Delphius

    Advanced Member

  • Moderador
  • PipPipPip
  • 6.295 mensajes
  • LocationArgentina

Escrito 29 julio 2013 - 02:32

Sergio, me parece que la duda de erikmx apunta más a como dibujar en pantalla el grafo.
Me da a entender que está en duda de cómo "pintar" en pantalla. Una posible manera sería pelearse con el Canvas y tirar líneas y luego pintar círculos como si se tratase de nodos.
La otra podría ser de emplear algún componente como los de TSimpleGraph u otros.

Aunque esto, como bien dices, no libra de las dificultades presentes al momento de cómo dibujar un grafo y evitar los cruces de línea. Hasta donde llegan mis conocimientos sobre teoría de grafos me temo que es imposible concebir un algoritmo que evite los cruces.

Saludos,
  • 0

#4 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 mensajes
  • Location127.0.0.1

Escrito 13 julio 2016 - 06:22

Hola, de acuerdo totalmente con @Delphius...

 

Pero el concepto es parcial, deberias de darnos mas Informacion para tener una idea mas amplia.... Veo en el titulo de la imagen que esta relacionado con un sistema de Alertas para Fraude.

 

Bien, aunque llegues a redibujar la relacion entre los Nodos, deberas manejar los eventos que conlleva esto.    Por lo general deberas usar algun componente comercial.

 

Te recomiendo el dxDBOrgChart de Developer Express, lo puedes comprar por separado, y este es su enlace   http://www.devexpress.com

 

Un dia me toco relacionar los Nodos ascendientes y descendientes para un Sistema Piramidal.  

 

para ver donde se reventaba "antes de invertir".....    Mucha dificultad.... por cierto...

 

Saludos, Espero que te sirva de algo el comentario. ;)


  • 0

#5 Delphius

Delphius

    Advanced Member

  • Moderador
  • PipPipPip
  • 6.295 mensajes
  • LocationArgentina

Escrito 13 julio 2016 - 07:54

Hola, de acuerdo totalmente con @Delphius...

 

Pero el concepto es parcial, deberias de darnos mas Informacion para tener una idea mas amplia.... Veo en el titulo de la imagen que esta relacionado con un sistema de Alertas para Fraude.

 

Bien, aunque llegues a redibujar la relacion entre los Nodos, deberas manejar los eventos que conlleva esto.    Por lo general deberas usar algun componente comercial.

 

Te recomiendo el dxDBOrgChart de Developer Express, lo puedes comprar por separado, y este es su enlace   http://www.devexpress.com

 

Un dia me toco relacionar los Nodos ascendientes y descendientes para un Sistema Piramidal.  

 

para ver donde se reventaba "antes de invertir".....    Mucha dificultad.... por cierto...

 

Saludos, Espero que te sirva de algo el comentario. ;)

 

El hilo es de hace dos años, creería que erikmx ya debe haber encontrado una solución o al menos alguna otra alternativa o forma de representar lo que necesitaba.

 

Saludos,


  • 0

#6 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 536 mensajes
  • LocationCali, Colombia

Escrito 14 julio 2016 - 05:34

Efectivamente la primera etapa es construir un Grafo, existen varios componentes gratuitos que te permiten construirlo, basta con leer la base de datos e ir añadiendo los nodos y las relaciones entre los nodos, en este caso las personas y sus relaciones.

 

Una vez tengas el grafo construido, es más fácil darte a la tarea de la pintada, aunque como todos mencionan no es tarea fácil, siempre hay trabajo en ello, y bastante trabajo, sin embargo si no quieres desgastarte y solo mostrarlos, es cuestión de priorizar o darle peso a cada nodo,  te sugiero la siguiente manera:

 

1. Por cada relación que tenga un nodo se le asigna un punto al nodo, es decir, si ese nodo tiene 3 parientes relacionados a él, el peso será de 3.   así al momento de pintar, deberás comenzar por los que tengan mayor peso y los de menor peso serán los últimos, que normalmente quedarán más lejos.

 

2. Crea una matriz imaginaria, donde en cada celda de la matriz cabrá solo un nodo, en el centro de la matriz irá el que mayor peso tenga y alrededor dibujarás los nodos más cercanos, igualmente con mayor peso y así sucesivamente,  (tendrás que realizar algunos ajustes aquí, pero esa es la idea).  solo un nodo en cada celda.

 

3. Debes tener una rutina para mover un nodo y todos sus compañeros cercanos, para abrir espacio, en caso que sea necesario.

 

4. La rutina de dibujado de las líneas,  en la cual es prácticamente imposible evitar que se crucen, pero creo que podrías lograr algo interesante.

 

Todo esto con el manejo de Canvas.

 

Observaciones:  Si lo que requieres es que después de pintado poder moverlos, ya es otra tarea diferente y en ese caso, realmente te recomiendo comprar un componente para eso, como el devart, que son excelente, y si hacen cuentas pues lo que le cuesta a la empresa tus horas de trabajo en ese proyecto, seguramente pagará con creces la compra del componente y ahorrarán mucho tiempo y esfuerzo.

 

Saludos.


  • 0