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 :

Construire un tableau hexagonale


Sujet :

Algorithmes et structures de données

  1. #1
    Membre averti Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Points : 358
    Points
    358
    Par défaut Construire un tableau hexagonale
    Bonjour a tous , j'ai envie / besoin , de construire un tableau hexagonale

    Cad que chaque élément du tableau doit avoir 6 voisins . On peut stocker ce tableau sous la forme d'une tableau d'un type contenant les adresses des 6 voisins ... Le probléme est le remplissage de ce voisin , je dois m'arranger pour que l'ensemble soit cohérant et je ne vois pas du tous comment faire . Merci de votre aide .

  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,

    tous ce que je sais sur le sujet c'est que c'était une méthode courante en stockage d'informations dans les entreprises d'imageries il y a pas mal d'années.
    Voilà un lien vers une thèse de quelqu'un qui a utilisé ce genre de maillage, demandes lui : Jean Carle http://www.laria.u-picardie.fr/Rubri...soutenues.html

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 192
    Points : 231
    Points
    231
    Par défaut
    Tu peux coder ça dans un tableau à deux dimensions classique.
    Graphiquement, ça reviendrait à considérer qu'une ligne sur deux est décalée d'une demi-case.
    Les voisins d'une cellule (i,j) sont alors (i=ligne, j=colonne) :
    - (i-1, j-1+(i modulo 2))
    - (i-1, j+(i mod 2))
    - (i,j-1)
    - (i,j+1)
    - (i+1,j-1+(i mod 2))
    - (i+1,j+(i mod 2))
    Ceci en considérant que les lignes impaires sont décalées d'une demi-case vers la gauche par rapport aux lignes paires.

  4. #4
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Yo charly, cherche "système radiciel", cela va te donner des idées

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    Et il y aussi un ancien message ici
    http://www.developpez.net/forums/showthread.php?t=17474

  6. #6
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    ai donné réponse dans autre post:

    http://www.developpez.net/forums/sho...d.php?t=230592

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2003
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 46
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par borisd
    Tu peux coder ça dans un tableau à deux dimensions classique.
    Graphiquement, ça reviendrait à considérer qu'une ligne sur deux est décalée d'une demi-case.
    Les voisins d'une cellule (i,j) sont alors (i=ligne, j=colonne) :
    - (i-1, j-1+(i modulo 2))
    - (i-1, j+(i mod 2))
    - (i,j-1)
    - (i,j+1)
    - (i+1,j-1+(i mod 2))
    - (i+1,j+(i mod 2))
    Ceci en considérant que les lignes impaires sont décalées d'une demi-case vers la gauche par rapport aux lignes paires.
    hello Boris, cette solution peut marcher, mais tout dépend de ce que tu veux faire avec. Si c'est juste récupérer les coordonnées, c'est bon.
    Perso, j'ai un algo qui considère qu'un hexagone = deux cases, une sur deux est remplie.
    Je gère deux référentiels : un référentiel de base dont le centre est le centre de ma grille, et un référentiel annexe, dont le centre est l'hexagone dont on veut trouver les voisins.
    Le référencement se fait en deux temps :
    1/ trouver les coordonnées de l'hexagone dont on veut les voisins dans le référentiel central
    2/ récupérer les voisins en utilisant un schéma fixe : se déplacer de case en case pour récupérer le contenu de chaque cellule et remplir un tableau des voisins.

    Est-ce que ça correspond à ce que tu cherche, Charly ?

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 192
    Points : 231
    Points
    231
    Par défaut
    Je trouve ma proposition plutôt simple et efficace (accès direct à une cellule, calcul des voisins ne nécessitant pas d'initialisation, en O(1) et sans calcul complexe).
    Il est probable qu'elle ne réponde pas à toutes les exigences et il est toujours mieux d'avoir sous la main des solutions variées pour un même problème. Cela dit, on ne sait pas trop si nos réponses conviennent à Charly ?

  9. #9
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    sorry, mais solution pas la plus simple (cf autre post)

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 192
    Points : 231
    Points
    231
    Par défaut
    Si tu veux parler de réseau radiciel, je n'ai aucune idée de si c'est simple ou pas, je n'ai pas regardé ce que c'était, ce que je sais, c'est que ma façon de faire m'est venue intuitivement et ne demande aucune connaissance particulière pour la mettre en oeuvre. Pas besoin de changer sa manière de voir le monde en gérant deux repères à la fois, dont un angulaire.
    Après, la notion simplicité d'une structure de données est d'une part subjective et dépend surtout de l'utilisation qu'on en fait.

    [Edit] L'autre post illustre ce que je viens de dire : pour trouver des symétries dans une structure hexagonale, le système radiciel a l'air tout trouvé. Pour seulement savoir énumérer les voisins d'une cellule et accéder à une cellule donnée (application aux automates cellulaires par exemple), pas besoin de quelque chose de si élaboré (si j'étais pas poli, je dirais même prendre un marteau-piqueur pour en... une mouche).

  11. #11
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Citation Envoyé par borisd
    Pour seulement savoir énumérer les voisins d'une cellule et accéder à une cellule donnée (application aux automates cellulaires par exemple), pas besoin de quelque chose de si élaboré (si j'étais pas poli, je dirais même prendre un marteau-piqueur pour en... une mouche).
    toi tu appliques des modulo 2, c'est plus simple, c'est cela?

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 192
    Points : 231
    Points
    231
    Par défaut
    - le modulo 2 peut être remplacé par un si/sinon pour les gens qui n'ont pas fait de CM2, ne connaissent pas la division euclidienne et ne savent pas que le reste de la division d'un nombre pair par 2 est 0
    - la méthode que je propose s'implémente directement par un type natif de la plupart des langages de programmation : le tableau à deux dimensions

    On n'a rien besoin d'autre!
    Quand je dis simplicité, j'entends une mesure de l'effort intellectuel nécessaire à la mise en oeuvre de la technique. La mise en oeuvre de la mienne est à mon sens immédiate.
    Si la tienne l'est aussi, tant mieux, on a deux solutions simples d'utilisation. Maintenant, n'essaie pas de me faire croire que décaler une ligne sur deux dans un tableau est plus difficile à comprendre qu'un "système radiciel" où on doit gérer un repère angulaire.

    A moins que tu ne parles d'autre chose que je n'ai pas saisi ou que tu fasses de l'humour

    [Edit]Pour que j'y voie plus clair, disons que chacune de mes cellules dispose d'un attribut A. Comment implémentes-tu une procédure prenant en entrée une cellule et consistant à ajouter aux A des cellules voisines le A de la cellule en entrée ?

  13. #13
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Citation Envoyé par borisd
    - la méthode que je propose s'implémente directement par un type natif de la plupart des langages de programmation : le tableau à deux dimensions

    A moins que tu ne parles d'autre chose que je n'ai pas saisi ou que tu fasses de l'humour
    Ouaih, je faisais de l'humour, mais il est en train de s'envoler

    La méthode proposée dans l'autre post, c'est justement d'utiliser aussi un tableau à 2 dimensions!!!

    TOUT les dev. que je connais qui ont eu à travailler avec un maillage hexagonal ont travaillé avec cette base (i,j) donnée dans l'autre post: c'est la BASE.

    Maintenant, tu fais comme tu veux, mais ne fais pas croire que ta méthode est LA bonne. Elle est bonne, c'est tout, et il n'y a pas de soucis pour travailler avec. Je prendrais juste la plus simple.

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 192
    Points : 231
    Points
    231
    Par défaut
    Ok, désolé pour la prise de tête
    Juste un dernier ptit détail : comment tu fais i+2j ou i-j dans un tableau à deux dimensions ?

  15. #15
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Citation Envoyé par borisd
    Ok, désolé pour la prise de tête
    Juste un dernier ptit détail : comment tu fais i+2j ou i-j dans un tableau à deux dimensions ?
    Rappel de 4ième ( ):

    i+2j = (1,2)
    i-j = (1,-1)

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 192
    Points : 231
    Points
    231
    Par défaut
    Citation Envoyé par Nemerle
    Rappel de 4ième ( ):

    i+2j = (1,2)
    i-j = (1,-1)
    Merci
    [edit] En fait c'est tellement simple que j'avais point compris

  17. #17
    Nouveau membre du Club
    Inscrit en
    Août 2003
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 46
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par borisd
    Si tu veux parler de réseau radiciel, je n'ai aucune idée de si c'est simple ou pas, je n'ai pas regardé ce que c'était, ce que je sais, c'est que ma façon de faire m'est venue intuitivement et ne demande aucune connaissance particulière pour la mettre en oeuvre. Pas besoin de changer sa manière de voir le monde en gérant deux repères à la fois, dont un angulaire.
    Après, la notion simplicité d'une structure de données est d'une part subjective et dépend surtout de l'utilisation qu'on en fait.

    [Edit] L'autre post illustre ce que je viens de dire : pour trouver des symétries dans une structure hexagonale, le système radiciel a l'air tout trouvé. Pour seulement savoir énumérer les voisins d'une cellule et accéder à une cellule donnée (application aux automates cellulaires par exemple), pas besoin de quelque chose de si élaboré (si j'étais pas poli, je dirais même prendre un marteau-piqueur pour en... une mouche).
    t'énerves pas Boris, ce n'est pas parce que ta solution t'es venue intuitivement qu'elle est la plus simple....
    Pour ce que je veux faire elle est trop limitée, et le réseau radiciel est pas mal. Reste juste à trouver comment passer d'un repère à l'autre avec une jolie fonction java....

  18. #18
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 192
    Points : 231
    Points
    231
    Par défaut
    En fait je n'avais clairement pas compris le coup du réseau radiciel sans vraiment lire l'autre post
    J'en ai déduis hativement que c'était plus compliqué
    Mea culpa, c'est plus simple, je m'excuse pour la prise de tête
    Les dessins me font peur, c'est comme si l'idée était trop compliquée pour tenir dans des phrases

  19. #19
    Nouveau membre du Club
    Inscrit en
    Août 2003
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 46
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par borisd
    En fait je n'avais clairement pas compris le coup du réseau radiciel sans vraiment lire l'autre post
    J'en ai déduis hativement que c'était plus compliqué
    Mea culpa, c'est plus simple, je m'excuse pour la prise de tête
    Les dessins me font peur, c'est comme si l'idée était trop compliquée pour tenir dans des phrases
    rooooh, on t'a jamais dit qu'un ptit dessin valait mieux qu'un grand discours ?
    Avec tout ça, on a perdu Charly... Ca serait bien qu'il nous zexplique comment il a fait histoire qu'on ait moins à réfléchir

  20. #20
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    no retour

Discussions similaires

  1. [Tableaux] Construire un tableau de manière récursive
    Par eclipse012 dans le forum Langage
    Réponses: 26
    Dernier message: 23/01/2007, 15h59
  2. [XSLT] construire un tableau JavaScript
    Par Mike35 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 16/10/2006, 14h21
  3. [Tableaux] Construire un tableau compliqué
    Par Bomba dans le forum Langage
    Réponses: 5
    Dernier message: 08/06/2006, 16h38
  4. [HTML] Construire un tableau colonne par colonne ?
    Par Cthulhu 22 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 11/05/2005, 15h31

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