IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Cherche algo pour le layout graphique


Sujet :

Algorithmes et structures de données

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Points : 393
    Points
    393
    Par défaut Cherche algo pour le layout graphique
    Hello

    je voudrai représenter dans un premier temps une arborescence sous forme d'arbre genre généalogique. Je cherche, je cherche mais je trouve pas.

    Une piste SVP

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Bonjour,

    Ta structure d'arbre de départ à des propriétés particulières (binaire, équilibrée, ...) ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    si tu veux un algo tout fait, il faut déjà savoir sous quel langage tu travailles pour savoir si tu peux récupérer l'algo dans une librairie par exemple (Boost est très bien en matière de graphe, d'arbre).
    Ensuite que veux-tu faire de ton arborescence? l'optimiser, trouver un parcours (utiliser l'algo de Kruskal, Dijkstra, si mes souvenirs sont bons).
    Quelles sont tes données initiales :
    as-tu un ensemble de noeuds et d'arcs et ensuite à toi de créé ton arbre?
    as-tu un arbre initial que tu dois modifier, coder?
    Je veux bien aider mais il faudrait un peu plus d'infos
    Bonne journée

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Points : 393
    Points
    393
    Par défaut
    En fait c'est tout simple (entre guillemet).

    J'ai une structure arborescente (en java le DefaultMutableTreeNode) d'objet graphique (des labels ou des boutons), que je connais. L'arbre n'a pas de propriété particulière.

    Je veux pas faire de calcul dessus est c'est pas non plus un graphe.
    Je veux juste faire un affichage graphique des éléments (labels) de l'arbre, sous une forme similaire à un arbre généalogique. Donc la racine en haut et les enfants en bas. (on pourrai imaginer d'autres direction avec la racine en bas, ou à droite...)

    Je connais pour chaque noeud (label), la taille de l'objet graphique. Ce qui me manque c'est le calcul de la position de chacun de ces éléments sur le panel d'affichage. Donc les coordonnées x,y pour chaque noeud.

    Je pense que c'est pas tout jeune comme problème et pourtant je ne trouve pas une référence sur laquelle m'appuyer.

    Merci pour votre aide

  5. #5
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Je commencerais par calculer la taille nécessaire pour afficher un noeud (en tenant compte de ses descendants). Ca peut se faire recursivement ou itérativement:

    Taille( N ) = Max( N.labelsize , Somme[ Taille( fils de N ) ] )

    Une fois qu'on connait la taille necessaire pour chaque noeud, il suffit d'afficher le label au centre de sa zone.


    en haut: l'arbre de départ. En rouge la valeur de Taille(N)
    en bas: les zones reservées pour l'affichage

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Points : 393
    Points
    393
    Par défaut
    C'est une première solution, j'ai pensé à un algo comme cela.

    Mais dans cette présentation on a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                             A
     
        B                   G                     H
     
    C  D  E  F           m                   I  J  K  L
     
                     n o p q r s t u v
    Tout est très espacé, ca ne permet pas d'avoir une visualisation bien concise pour des arbres un peu grand (en plus dans mon cas les composants graphiques on un taille inconnu).

    J'aimerai réussir à avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                        A
     
        B             G         H
     
    C  D  E  F     m       I  J  K  L
     
              n o p q r s t u v
    Pour le noeud G (qui est déployé ici) on voit que l'espace nécessaire pour G selon ton algo pseudocode chevauche les espaces de B et H, mais on a pas pour autant des labels (noeud) qui se chevauchent graphiquement. C'est cet algo que je voudrais réussir à implémenter. C'est déjà plus tordu.

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Points : 393
    Points
    393
    Par défaut
    Zut il m'a pas garder les espaces dans mon post; j'espère être compréhensible quand même

    http://www.jvisio.com/tensite/en/tec...reeLayout.html

    je voudrais un layout comme celui en haut à gauche. C'est dingue j'arrive pas à trouver un doc là dessus, pourtant sur les graphes il y a une envolée lyrique incompréhensible.

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Ah, effectivement ca va etre plus dur.

    Je commencerais par chercher l'étage le plus large, c'est à dire la profondeur "P" pour laquelle la somme des largeurs des labels est maximale. Ensuite il faut calculer la position de leurs noeuds parents/enfants. Le problème c'est que les "liens" entre les labels risquent d'être cachés.

    Peut-etre par programmation dynamique... je vais y réfléchir

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Points : 393
    Points
    393
    Par défaut
    Je sais pas ce qu'est la programmation dynamique; surtout ce qui est difficile je pense c'est de faire un algo léger.

    Je pensais à fonctionner par étape:
    1/ Je calcule la position de chaque noeuds sans me soucier des chevauchements, et à chaque noeud je conserve la largeur prise par les noeuds enfants (x max et x min), appelons ca un range

    2/ Je parcours l'arbre et à chaque noeud j'opère un décalage si les enfants de ce noeud (le range donc) chevauche ce du noeud frère précédent.

    Dans le genre en tout cas.

  10. #10
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par Alec6 Voir le message
    Je sais pas ce qu'est la programmation dynamique; surtout ce qui est difficile je pense c'est de faire un algo léger.

    Je pensais à fonctionner par étape:
    1/ Je calcule la position de chaque noeuds sans me soucier des chevauchements, et à chaque noeud je conserve la largeur prise par les noeuds enfants (x max et x min), appelons ca un range

    2/ Je parcours l'arbre et à chaque noeud j'opère un décalage si les enfants de ce noeud (le range donc) chevauche ce du noeud frère précédent.

    Dans le genre en tout cas.
    C'est exactement cela de la programmation dynamique.

  11. #11
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Il y a une méthode que j'avais utilisé dans une appli web pour visualiser des graphes.

    J'utilisais l'outil GraphViz et son format DOT. Je générais un fichier dot (qui correspond grosso modo à l'ensemble des arêtes entre les sommets), je passais GraphViz dessus et j'obtenais une image (png etc...) que je mettais sur le navigateur du client.

    http://www.graphviz.org/

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Alec6 Voir le message
    Zut il m'a pas garder les espaces dans mon post; j'espère être compréhensible quand même

    http://www.jvisio.com/tensite/en/tec...reeLayout.html

    je voudrais un layout comme celui en haut à gauche. C'est dingue j'arrive pas à trouver un doc là dessus, pourtant sur les graphes il y a une envolée lyrique incompréhensible.
    j'ai une tite idee que je creuserais ce soir ou ce we..

    Mais par contre, je pense que les dessins pointes par ton lien sont "ajustes" soit a la main, soit avec des "espaces" elastiques, car les epaces ne sont pas coherents... Sans doute un ajustement "apres coup"...

  13. #13
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Oui, je l'ai dit au moins 10 fois sur developpez

  14. #14
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut
    Salut.

    J'avais fait un programme Java qui faisait exactement ce que tu cherches.
    Avec un peu de chance, j'arriverais à remettre la main dessus.
    Mais :
    1) je crois me souvenir qu'il n'était pas parfait;
    2) c'est un de mes 1er développement en Java, et je crains fort que le code soit affreux et non réutilisable

    Citation Envoyé par pseudocode
    Je commencerais par chercher l'étage le plus large, c'est à dire la profondeur "P" pour laquelle la somme des largeurs des labels est maximale. Ensuite il faut calculer la position de leurs noeuds parents/enfants.
    Je commençais comme ça.

    Citation Envoyé par pseudocode
    Peut-etre par programmation dynamique... je vais y réfléchir
    Et je continuais comme ça

  15. #15
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Points : 393
    Points
    393
    Par défaut
    Je suis en train d'envisager une solution en presque une passe récursive.

    en tout cas je crois qu'il faut que dans un premier temps je positionne les enfants relativement aux parents. En faite je cherche la position relative des enfants par rapport aux parents.

    En dernier je calcul la position absolue pour mon média.

  16. #16
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut
    Les parents, comment les places-tu dans un 1er temps ?
    (il faut bien qu'ils aient une position pour calculer celles des enfants)

  17. #17
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Points : 393
    Points
    393
    Par défaut
    Je prend un noeud

    1/Je calcule le range de ses fils (largeur occupée par les fils espaces compris)
    (ca me fait une première itération sur les fils)

    2/Pour chaque fils:
    - 2.1/je calcule la position X, c'est la somme des widths des composants graphiques qui le précède avec les espaces - range/2 pour une décalage sur le repère. On parle d'un repère locale on père qui se trouve en (0,0). Je fais ici une deuxième itération (snif c'est moche).
    - 2.2/j'en appel à la récursivité (et à un miracle) et pour que le fils courant calcul à son tour la position de ses fils. Donc je rappel la fonction. Donc je parcours tout l'arbre en profondeur et de gauche à droite si on peut dire.

    3/Au retour des appels récursif je dispose pour le noeud courant du range de ses enfants mais également du range des déscendants. Je dois donc pouvoir faire un calcul sur les décalages à opérer pour éviter les chevauchement.
    J'ai peut etre pas besoin de calculer en faite la position dans l'étape 2.1, ca peut se faire ici ?

    On progresse on progresse

  18. #18
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par millie Voir le message
    Il y a une méthode que j'avais utilisé dans une appli web pour visualiser des graphes.

    J'utilisais l'outil GraphViz et son format DOT. Je générais un fichier dot (qui correspond grosso modo à l'ensemble des arêtes entre les sommets), je passais GraphViz dessus et j'obtenais une image (png etc...) que je mettais sur le navigateur du client.

    http://www.graphviz.org/
    Je viens de le refaire Choix d'un projet dans le navigateur web, récuperation des sources via svn ou cvs automatiquement, parsing des fichiers pom.xml de maven, génération des dépendances, génération du graphe au format gif avec conflit et lecture de l'image via le browser du client.

  19. #19
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    J'ai testé moi aussi cette méthode sur mon serveur de gestion de sources. Ca marche très bien...

  20. #20
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    J'ai testé moi aussi cette méthode sur mon serveur de gestion de sources. Ca marche très bien...
    De mon côté, ça ne sert juste qu'à indiquer des erreurs de dépendances/versions lors de la compilation de projet via une appli Web.

Discussions similaires

  1. Cherche infos pour faire de belles interfaces graphiques
    Par vtuning.net dans le forum Windows Forms
    Réponses: 14
    Dernier message: 14/01/2010, 04h20
  2. cherche algo pour spliter une page web
    Par guiyomh dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 19/05/2008, 17h36
  3. Cherche GUI pour construction d'IHM : un éditeur graphique XML
    Par hugo123 dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 29/10/2007, 20h01
  4. Cherche tutorial pour interface graphique
    Par Le Pharaon dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 07/04/2006, 18h58
  5. cherche algos Delphi pour : Huffman, R.S.A, D.E.S.
    Par X-Delphi dans le forum Débuter
    Réponses: 3
    Dernier message: 24/08/2002, 19h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo