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

Développement 2D, 3D et Jeux Discussion :

Indexation multi-key ?


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut Indexation multi-key ?
    Bonjour,
    Je ne suis pas sur que ce soit posté au bon endroit, mais je ne vois guere que là pour ce genre de question.

    Voilà, j'ai à réaliser une image, en fonction de points de reference ponderés dans cette image. En clair, j'ai une image et une liste de points avec des valeurs. Mon objectif est de calculer la couleur de chaque pixel en fonction de sa position par rapport aux points de reference et de leur valeur bien sur.

    Pour simplifier le travail, chaque pixel ne prendrai en compte pour ses calculs que les 4 points de reference les plus proches (sauf cas particulier).

    Dans cette optique et pour une application temp réel (dans la mesure du possible) je pense indexer mes pixels et mes points de reference, de maniere à faire correspondre à chaque pixel ses capteurs de reference, et donc à calculer ensuite plus rapidement.

    Le temps d'indexation n'est pas important, car ce ne sera fait qu'une seule fois.

    J'ai regardé du coté de la stl, et j'ai reperé les map/set/...

    Et donc voilà le coeur du probleme : mes pixels sont referencés par 2 clés (X et Y) et donc existe t -il un conteneur associatif qui gere les couple de clé ?
    ou dois-je adapter mon probleme autrement ?

    Merci.
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  2. #2
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Il suffit que tu crées une classe CPoint, avec deux membres X et Y et que tu définisse les opérateurs == et < et tu pourras utiliser des std::map ou des std::set.
    Il n'existe à ma connaissance aucun container avec deux clés dans la stl.

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Citation Envoyé par Bebers Voir le message
    (...) et que tu définisse les opérateurs == et < et tu pourras utiliser des std::map ou des std::set.
    L'opérateur < est nécessaire et suffisant.

    Sinon il est aussi possible d'utiliser comme clef un std::pair< int, int > (si les coordonnées sont des int).

    MAT.

  4. #4
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    utiliser un pair<> comme clé ? tiens bon à savoir...

    Pour le moment j'ai contourné le probleme en indexant de maniere incrémentale, mais je pourrais revenir à une méthode plus "propre" par la suite.

    Merci
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  5. #5
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Ce qu'il faut retenir et se répéter c'est que dans tous les problèmes de tri, tri à plusieurs clé = tri à une seule clé. On peut trier des bananes et des avions, ce qui compte c'est la fonction de comparaison.

    Maintenant le problème qui va te heurter bientot c'est que ton tri va certes te donner un ordre de clés, mais que cet ordre ne te donnera aucune information sur la distance. Et que donc tu seras toujours réduit à parcourir linéairement ta liste de points de référence pour trouver les quatre les plus proches.. Retour au point zéro.

    En fait l'approche que tu dois avoir est similaire à celle du photon mapping : le calcul du point X,Y, dépend des n points de référence les plus proches. Tout comme dans le photon mapping, la valeur d'éclairage en X,Y,Z dépendra des n photons les plus proches. Il n'y a pas de formule de tri qui te donnera les n plus proches. Par contre tu peux exploiter les possibilités de "pruning" apportées par un kd-tree (une forme d'arbre binaire de subdivision spatiale).

    Il y a une explication et un code de KD-tree pour retrouver les n photons les plus proches ici :
    Photon mapping et kd tree.
    Tu peux peut-etre t'en inspirer.

    Il y a peut-etre d'autres méthodes liées à la spécificité de ton problème mais sans plus de détail difficile de dire.

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  6. #6
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    en fait, dans ma boucle de calcul des points de reference les plus proche, j'utilise un autre map temporaire ayant la distance pour clé. ainsi j'ai directement mes elements triés.

    en tout cas merci de vos réponses si completes.
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/07/2014, 14h35
  2. [9.2] Index "multi forme"
    Par gorgonite dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 03/02/2014, 17h32
  3. [Lazarus] Index multi colonne sous Lazarus et Sqlite
    Par ovni76 dans le forum Lazarus
    Réponses: 2
    Dernier message: 06/08/2009, 16h12
  4. Index multi champs
    Par Junior_jef dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 14/06/2007, 10h50
  5. Pb index multi-valeurs avec DBase
    Par Rickless dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/01/2006, 16h50

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