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

Free Pascal Discussion :

Dessin d'un "treemap"


Sujet :

Free Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 29
    Par défaut Dessin d'un "treemap"
    Bonjour

    Avant de partir dans de sombres explications :
    http://en.wikipedia.org/wiki/Treemapping

    Disons pour faire simple et avoir un exemple qui nous parle à tous.
    Mon disque dur est presque plein; Je veux pouvoir repérer les répertoires/fichiers très volumineux sur mon disque rapidement.

    Les graphes "Treemapping" sont exactement ce je cherche à faire. Mais je ne vois pas du tout comment attaquer le problème...

    Il faudrait passer à mon programme une longueur, une largeur et la racine de mon arbre ( enfin mon disque dur ) et le programme listerait les coordonnées des rectangles représentant les nœuds de mon arbre ( mes répertoires et fichiers )

    Pour l'instant, j'arrive a avoir l'aire de chaque rectangle (la taille du fichier ou répertoire)... c'est loin d'être suffisant .

    Quelqu'un a une idée ?

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    je ne sais pas le faire en Pascal

    mais tu cherches à faire ceci manifestement
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Oui un autre programme pour voir ça est SpaceMonger...

    Si ca peut t'aider, saches que dans ces logiciels, les rectangles les plus petits ne sont pas affichés, seuls les plus gros sont visibles. L'aire des rectangles est calculée par rapport à la taille de la fenêtre, c'est donc plus un rapport qu'une aire exacte qu'il faut obtenir. Enfin toute la difficulté consiste à trouver l'équilibre longueur/largeur des rectangles à partir de l'aire, et là, je sèche un peu, mais il doit y avoir des algorithmes qui existent ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 29
    Par défaut
    @Paul
    Pour un pb d'espace disque : oui c'est ça ... mais je veux le mien
    Pour un pb plus générique d'arbre : c'est ça mais comment ???
    Je cherche l'algo ... en Pascal/Delphi/Lazarus

    @wormful_sickfoot
    Oui, il y a des algos, ils sont mentionnés dans la page wikidedia (en) sur la page (fr) il sont à venir.

    Il y a bcp d'applications à cet algo, un exemple qui est pas mal : http://newsmap.jp/

    Pour revenir sur l'exemple de l'espace disque (avec des FindFirst / FindNext ) j'ai une liste : d'éléments {size ; filename}
    (je posterai le code demain, si je trouve le temps)
    Le plus grand size est forcément la racine, la racine doit occuper X*Y pixels
    X*Y = k*racine.size <=> X*Y/racine.size = k
    k correspond au rapport qui donne le nombre/quantité/aire représenté par un pixel.

    C'est le découpage (en n enfants) de la racine qui me pose soucis (avec 2 enfants ce serait presque trivial).

    C'est difficile de réfléchir en récursif et je n'ai pas voulu poster sur "algorithmique" parce que je ne comprend riens à leurs posts

  5. #5
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    J'ai pas tout saisi.

    Considères plutôt la chose comme ça: la fenêtre est la racine (par exemple le disque C: ). Ce que tu appelles la racine c'est le contenant, donc la fenêtre. A partir de là, tu sais pour chaque fichier de C: le rapport k, donc tu peux tracer un rectangle (si j'ai tout suivi). A partir de là, tu te places dans ce rectangle (qui correspond à un répertoire) et tu listes les fichiers comme tu l'as fait auparavant et tu obtiens le rapport k pour chaque fichier, tu traces un rectangle pour chaque fichier etc...

    Tu peux faire ça en itératif, pas forcément besoin de récursif (puis ca sera peut-être plus simple à coder aussi )

  6. #6
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    je ne connais pas d'équivalent en Pascal, mais WinDirStat est OpenSource et donne deux PDF sur le sujet

    EDIT: après une petite recherche j'ai trouvé ceci et ceci que je n'ai pas testé

    et dans un autre genre scanner
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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