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

C++/CLI Discussion :

Comment mapper des coordon�es 3d vers un index?


Sujet :

C++/CLI

  1. #1
    Membre confirm�
    Inscrit en
    F�vrier 2013
    Messages
    94
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2013
    Messages : 94
    Par d�faut Comment mapper des coordon�es 3d vers un index?
    Bonjour � toutes et � tous,

    J'ai un grand ensemble de points r�partis dans un espace 3D (voire possiblement un espace en plus grandes dimensions) sous forme d'une lattice homog�ne comprise entre [-n, ..., n]^d
    Je souhaite pouvoir indexer ces points dans un simple tableau en 1 dimension pour pouvoir les trouver sans parcourir mon tableau. Par exemple associer les coordonn�es suivantes aux indexes:
    {x1, y1, z1} donne idx1
    {x2, y2, z2} donne idx2
    {x3, y3, z3} donne idx3
    etc.
    Avec une pr�cision: la lattice en 3d est centr�e en {0,0,0} (donc {x1,y1,z1} = {0,0,0}).

    Il me faut donc une fonction bijective de mapping qui, pour chaque point 3D, associe un index dans mon tableau. Ainsi quand je me trouve en {x1,y1,z1} je sais que dans mon tableau je peux aller chercher la valeur correspondante � l'indice 'idx1'.
    Je dois r�aliser cette op�ration un grand nombre de fois (de l'ordre de 10^13 fois au minimum, sans doute beaucoup plus).

    Que me conseilleriez vous d'utiliser? je ne trouve pas de fonction de mapping.
    Ma question porte vraiment pour la 3D mais s'il est possible de g�n�raliser � 'd' dimensions avec d dans [1, n], ca m'int�resse aussi (mais c'est secondaire).

    Merci
    Edit: Je me suis tromp� de cat�gorie, est-il possible de d�placer ce post dans la section C/C++ ? Merc

  2. #2
    Mod�rateur
    Avatar de dinobogan
    Homme Profil pro
    ing�nieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France

    Informations professionnelles :
    Activit� : ing�nieur
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par d�faut
    C'est "simplement" la g�n�ralisation du tableau 2D mapper en une dimension.
    Mais il y a deux soucis majeurs :
    1. il faut borner ton rep�re sur chaque axe.
    2. ton tableau va �tre absolument gigantesque tr�s vite et aura pleins de trous.


    Sinon tu vas aligner les sous-tableaux de x1 cons�cutifs en partant du min x2 jusqu'au max x2 pour x3=min. Puis tu recommences pour x3=min+1.
    Pour trouver l'index : x3 * (amplitude de x2) * (amplitude de x1) + x2 * (amplitude de x1) + x1

    Tu �tends � n dimensions.
    Tu devrais plut�t t'orienter vers une autre structure, comme l'arbre B par exemple ou tout autre arbre �quilibr�. Ou encore une table de hashage, encore faut-il trouver la bonne fonction de hashage ;-)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 644
    Par d�faut Tableau ?
    Bonjour,

    Comme d�j� expliqu� le tableau � trois dimensions est peu utilisable (saturation rapide de l'espace m�moire).

    Outre les arbres, il est possible de stocker dans un tableau ou une liste, une structure x, y, z, index (ou peut �tre mieux pointeur) et de faire une recherche dichotomique sur x, y z. C'est assez rapide car en O(log n) ) et n'aura besoin que d'un tableau d'un taille proportionn�e au nombre de points effectifs dans l'espace 3D.

    Salutations

  4. #4
    Membre confirm�
    Inscrit en
    F�vrier 2013
    Messages
    94
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2013
    Messages : 94
    Par d�faut
    Merci pour vos retours �clair�s!
    Effectivement, rechercher c'est lent. J'essaye d'�viter cette solution, m�me avec des complexit�s de l'ordre de log(n), vu le nombre ph�nom�nal d'appel � la fonction (j'ai une convergence tr�s lente et en plus je suis oblig� de simuler un certains nombre de fois = le pire des cas).

    Sinon tu vas aligner les sous-tableaux de x1 cons�cutifs en partant du min x2 jusqu'au max x2 pour x3=min. Puis tu recommences pour x3=min+1.
    Pour trouver l'index : x3 * (amplitude de x2) * (amplitude de x1) + x2 * (amplitude de x1) + x1
    Effectivement j'ai aussi pens� � l'indexation lin�aire et j'ai test� mais je me retrouve avec des bornes tableaux vite immenses et effectivement beaucoup de trous dedans. Donc loin d'�tre pratique, mais par contre indexation instantan�e.

    Ou encore une table de hashage, encore faut-il trouver la bonne fonction de hashage
    Oui! C'est en fait ce que je recherche. Du coup, je m'oriente vers plusieurs options:
    • mapper ces points dans une hypersph�re et ind�xer par un angle, mais ca me parait un peu compliqu� (et la pr�cision compte)
    • la Courbe de Hilbert qui permet de mapper des hautes dimensions en plus basse dimensions, mais il faut que je creuse


    Merci pour vos conseils je vais voir ce que je peux sortir de toutes ces propositions et si vous avez des id�es additionnelles je suis preneur pour poovoir tester et regarder ce qui marche le mieux.

  5. #5
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 644
    Par d�faut Ordres de grandeur
    Bonjour,

    Prenons un exemple, pour un cube de 10 000 points de cot� soit 1012 points 3D, avec un taux de remplissage de 10 % par axe il faudrait un tableau d'environ 230 �l�ments. Il faudra alors 30 acc�s pour chaque recherche, soit de l'ordre de la microseconde(avec anticipation c'est dire sans attente de donn�es : je demande la donn�e i, je traite la donn�e i-a, je demande la donn�e i+1, je traite la donn�e i+1-a...).

    Mais 1013 recherches prendraient d�j� 107 secondes c'est � dire plus de 10 ans !

    En revanche, sur un tableau complet (assez irr�aliste) la recherche serait 30 fois plus rapide se qui prendrait quand m�me 4 mois pour faire l'ensemble des recherches. Et en plus il y a des traitements !

    A l'envers, en faisant des hypoth�ses de temps acceptable, de taux de remplissage de l'espace 3D, il est possible de calculer une taille maxi de l'espace 3D (vraisemblablement un cube de 1000 points de cot�).

    Salutations

Discussions similaires

  1. [Toutes versions] Comment exporter des donn�es Excel vers une base Access
    Par BoGoss24 dans le forum Microsoft Office
    R�ponses: 1
    Dernier message: 12/12/2019, 10h21
  2. [XL-2007] Comment enregistrer des donn�es dynamique vers une base de donn�es
    Par latizeva dans le forum Macros et VBA Excel
    R�ponses: 1
    Dernier message: 19/11/2013, 23h03
  3. [Security] Mapper des infos LDAP vers un bean custom � l'aide de spring security
    Par thierryler dans le forum Spring
    R�ponses: 3
    Dernier message: 26/07/2012, 10h03
  4. R�ponses: 25
    Dernier message: 26/04/2011, 13h58
  5. R�ponses: 16
    Dernier message: 20/03/2006, 23h21

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