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 :

[GRAPHES ?] Structure pour stocker des rectangles


Sujet :

Algorithmes et structures de données

  1. #1
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 887
    Points : 1 531
    Points
    1 531
    Par défaut [GRAPHES ?] Structure pour stocker des rectangles
    Voici mon problème: j'ai besoin de mémoriser un grand nombre de rectangles, de dimensions diverses, et surtout de pouvoir les retrouver le plus rapidemment possible à partir de leurs coordonnées:

    - Quels sont les rectangles qui contiennent le point X, Y
    - Quels sont les rectangles qui sont dans (ou qui intersectent) un rectangle donné.

    Je cherche donc une structure capable de structurer ces rectangles, du style arbre AVL pour les chaînes de caractères (pour la rapidité de recherche).

    On a souvent parlé ici même du stockage et de recherche de coordonnées 2D, mais le problème est plus complexe: si un rectangle est de grandes dimensions, un point peut être dans ce rectangle et être très éloigné de ses coins. La recherche par rapport aux coordonnées des coins (ou du centre) ne sera pas efficace.

    Les rectangles sont de taille et de forme quelconque (aplatis, allongés), mais tous parallèles aux axes (horizontaux ou verticaux).

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    bonjour,

    je sais qu'il existe une structure tres particulière qui permet de gérer une tres grand nombre de triangle, notamment dans les cas de représentation de volumes par triangles.
    Cette structure non triviale au premier abord, permet de savoir quel triangle en touche un autre, les voisins, ....

    Tu pourrais peut être t'en inspirer ...

  3. #3
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 887
    Points : 1 531
    Points
    1 531
    Par défaut
    Citation Envoyé par ToTo13
    Tu pourrais peut être t'en inspirer ...
    Oui, peut-être. Aurais-tu un lien, un nom, une piste pour retrouver ça ?

    Mais je précise que mes rectangles sont totalement quelconques: ils se chevauchent, ou ne se touchent pas, etc...

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Si l'espace est fini, on peut utiliser un quadrillage en cases de taille fixe.
    On associe à chaque case , les rectangles qui ont une intersection avec la case.
    (techniquement, Tableau de cases T à 2 dimension dont un élément pointe sur la liste des rectangles ayant une intersection avec la case).

    Pour un point, on détermine à quelle case il appartient et on vérifie dans la liste des rectangles associés à la case, lesquels contiennent effectivement le point.

    Pour un rectangle ABCD, on détermine à partir de A B C D les index min et max en X et Y des cases à traiter, puis on vérifie si pour chaque liste il y a intersection (attention on peut rencontrer le même rectangle dans 2 listes).

    Pour optimiser les vérifications, on peut mettre un flag qui indique que si la case est entiérement contenue dans le rectangle.

  5. #5
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 887
    Points : 1 531
    Points
    1 531
    Par défaut
    Citation Envoyé par Graffito
    Si l'espace est fini, on peut utiliser un quadrillage en cases de taille fixe.
    L'espace est fini, bien sûr, mais pas forcément déterminé au départ. Il se peut qu'on doive ajouter en cours de traitement des zones qui débordent.

    Citation Envoyé par Graffito
    On associe à chaque case, les rectangles qui ont une intersection avec la case. (techniquement, Tableau de cases T à 2 dimension dont un élément pointe sur la liste des rectangles ayant une intersection avec la case).
    Mouais, c'est la solution à laquelle on pense a priori. Mais elle a des tas de défauts: gaspillage de mémoire (il y aura sûrement des cases vides), post-traitement à faire pour éviter les doublons (puisqu'un rectangle peut être dans plusieurs cases. Et dans le pire des cas (un grand rectangle et plein de petits dans la même case), ça peut être pire qu'une recherche séquentielle.

  6. #6
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par 10_GOTO_10
    Voici mon problème: j'ai besoin de mémoriser un grand nombre de rectangles, de dimensions diverses, et surtout de pouvoir les retrouver le plus rapidemment possible à partir de leurs coordonnées:

    - Quels sont les rectangles qui contiennent le point X, Y
    - Quels sont les rectangles qui sont dans (ou qui intersectent) un rectangle donné.
    Le nom anglais du problème, c'est Spacial Access Methods.

    Structures de données classiques:
    - R-Tree (avec une tonne de variantes)
    - kd-Tree (dans ton cas, k=2)
    - Quad-tree

Discussions similaires

  1. Structure pour stocker des variables
    Par lennelei dans le forum Langage
    Réponses: 7
    Dernier message: 05/07/2012, 15h39
  2. Réponses: 8
    Dernier message: 16/04/2009, 06h51
  3. Files Mapping pour stocker des structures de données
    Par Targan dans le forum Débuter
    Réponses: 0
    Dernier message: 27/12/2007, 11h38
  4. [C++] quelle structure de donnée utiliser pour stocker des vertices ?
    Par johnnyjohnny dans le forum Développement 2D, 3D et Jeux
    Réponses: 14
    Dernier message: 14/07/2007, 21h44
  5. [Debutant]Cherche equivalent à CObArray pour stocker des obj
    Par etiennegaloup dans le forum Débuter
    Réponses: 2
    Dernier message: 10/04/2006, 22h49

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