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

Mathématiques Discussion :

Zones voisines dans un espace à N dimensions


Sujet :

Mathématiques

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mai 2004
    Messages : 46
    Points : 28
    Points
    28
    Par défaut Zones voisines dans un espace à N dimensions
    Bonjour,

    Je m'intéresse au problème suivant:

    Soit des zones définies par deux coordonnées: une minimum (borne incluse) et une maximum (borne exclue) comme illustré. La figure ci-dessous illustre le cas pour la zone B.



    Les zones font parti d'un espace fini. J'essai d'élaborer un algorithme qui permet de savoir si deux zones se touchent sur une dimension donnée: par exemple B touche A et D mais pas C. Mon but est de réaliser un algorithme qui puisse être appliqué pour un espace à N dimensions. C'est-à-dire que j'ai toujours deux coordonnées qui permettent de délimiter les zones et chacune des coordonnées aura N composantes, une pour chaque dimension.
    Ainsi par exemple pour un espace à 3 dimensions, une zone sera représentée par un cube et le problème consiste à savoir si pour une dimensions donnée (donc sur un plan) deux cubes sont voisins. Pour cela j'ai réalisé l'algorithme suivant (dans mon cas, les dimensions sont numérotées à partir de 0: 0 pour x, 1 pour y, etc.). Après quelques essais dans un espace à deux dimensions, l'algorithme semble fonctionner.

    Mon problème est que je n'ai aucune idée si mon algorithme fonctionne à N dimensions et au dessus de 2 dimensions il est vraiment pas évident de faire des essais. Quelqu'un voit il une erreur dans mon algorithme et/ou connaitrait il un algorithme qui répond au problème sur N dimensions?

    Voici mon algorithme écrit en Java, j'ai mis ici uniquement la méthode essentielle de la classe Zone:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public boolean isAbutsWith(Zone zone, int dimension) {
           boolean dimResult = false;
           boolean borderResult = false;
     
           for (int dim = 0; dim < NB_DIMENSIONS; dim++) {
               if (dim == dimension) {
                   dimResult =
                       !this.getCoordinateMin(dim).equals(zone.getCoordinateMax(dim))
    && !this.getCoordinateMax(dim).equals(zone.getCoordinateMin(dim));
               } else {
                   borderResult |=
                       CoordinateValue.isBetween(
                                this.getCoordinateMin(dim),
                                zone.getCoordinateMin(dim),
                                zone.getCoordinateMax(dim))
                       ||
                        CoordinateValue.isBetween(
                                this.getCoordinateMax(dim),
                                zone.getCoordinateMin(dim),
                                zone.getCoordinateMax(dim)))
                       ||
                       CoordinateValue.isBetween(
                                 zone.getCoordinateMin(dim),
                                 this.getCoordinateMin(dim),
                                 this.getCoordinateMax(dim))
                       ||
                       CoordinateValue.isBetween(
                                 zone.getCoordinateMax(dim),
                                 this.getCoordinateMin(dim),
                                 this.getCoordinateMax(dim));
               }
           }
     
           return dimResult && borderResult;
       }
    Je suis ouvert à toutes idées

    Merci.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Moi, j'aurais plutôt une autre approche.
    Chaque figure en N dimensions est caractérisée par son centre (moyenne des 2 points) et le demi côté dans les N dimensions.
    Deux figures se touchent si la distance entre leurs centres est inférieure à la somme des 1/2 côtés correspondants.
    Le carré de la distance entre les centres est la somme des carrés des différences de coordonnées.
    D² = somme (dx² + dy² + dz² + ...)
    La somme des 1/2 côtés, n'est pas tout à fait claire dans mon esprit, la plus petite somme ? la plus grande somme ? pour l'instant, je ne sais pas.
    Il y 2 cas limite à étudier :
    1- les figures sont strictement accolées par une "face" c'est à dire que toutes les coordonnées des points sont identiques, sauf une et leur différence est égale à la somme des 1/2 cotés correspondants.
    2- l'autre cas c'est quand le point A(min) d'une forme est identique au point B(max) de l'autre forme. Dans ce cas D² = somme (1/2 côtés au carré).

    Après réflexion, au lieu de calculer la "distance" euclidienne, il est peut être plus simple pour le test de calculer la distance telle D= somme (dx, dy, dz, ...). Faites une recherche de distance dans Wikipédia, j'ai lu un article. .
    Dernière modification par Invité ; 16/10/2010 à 13h26.

  3. #3
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 814
    Points : 7 642
    Points
    7 642
    Par défaut
    +1 avec l'approche de Pierre.

    Par contre, au lieu de calculer une distance euclidienne, partir directement sur les distances par composante (ou dimension), et comparer à la somme des demi-longueurs pour chaque composante. Si c'est strictement inférieur, ça s'intersecte, si au moins un test est égal (à un epsilon près, attention aux nombres décimaux en informatique...), ça se touche, si au moins un test est strictement supérieur, pas de contact.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  4. #4
    Invité
    Invité(e)
    Par défaut
    @plegat,
    Là j'en rougi de plaisir

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/03/2012, 20h43
  2. Zones voisines dans une décomposition de Voronoï
    Par Nemerle dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 30/09/2010, 10h49
  3. Recherche de n plus proches voisin dans un espace de 2 dimension.
    Par mobi_bil dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/05/2009, 10h56
  4. Recherche des plus proches voisins dans un espace variable à K dimensions parmis N
    Par JeromeBcx dans le forum Algorithmes et structures de données
    Réponses: 34
    Dernier message: 26/06/2008, 17h46
  5. Recherche du point le plus proche dans un espace à N dimension
    Par arnoldo165 dans le forum Mathématiques
    Réponses: 6
    Dernier message: 15/04/2008, 00h06

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