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 :

Calcul de distance entre deux points dans une grille


Sujet :

Mathématiques

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 43
    Points
    43
    Par défaut Calcul de distance entre deux points dans une grille
    Bonjour à tous,

    Je travaille sur un projet de jeux sur une grille 2 d. Lors de l'initialisation de la partie, je dois placer des joueurs sur la grille de jeux. Je souhaiterais que chaque joueur se trouve à égale distance de sont voisins précédents et suivants. La grille est carrée de coté G. Il y a entre 2 et N joueurs.

    Je bloque totalement sur l'algorithme permettant de calculer la distance à laisser entre chaque joueur.

    Si quelqu'un à une solution ou des pistes, je suis preneur.


    Cordialement,

    Yortheon

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 396
    Points
    9 396
    Par défaut
    En général, dans les jeux sur grilles, on ne parle pas de la distance classique (appelée distance euclidienne par les matheux) mais d'une autre distance, obtenue avec une autre formule, et qu'on appelle en générale distance de Manhattan (J'aime beaucoup ce nom).
    Recherche "distance de Manhattan" sur Google, tu devrais trouver ton bonheur.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 43
    Points
    43
    Par défaut
    J'ai vite fait vue cette distance en cours de cluster, je vais me pencher dessus.

    Merci.

    PS : je posterais si je trouve la solution (ou non).

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 43
    Points
    43
    Par défaut
    J'ai finalement trouver une solution, en m'inspirant de la distance de Manhattan.

    Notons g la taille de la grille et j le nombre de joueurs.

    La bordure extérieur de la grille noté s est égale à : La distance optimal est donc : Attention tout de même car la valeur retourné n'est pas toujours entière.

    L'idéal est donc d'obtenir l'arrondi à l'entier le plus proche.

    Voici le calcul de la distance optimal en pseudo code (avec comme distance minimal 2) :

    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
     
    fonction obtenirDistanceOptimal(g:entier, j:entier): entier
        surface, max, distanceOptimale : entier
     
        surface = 4 * g -4
        max = surface-j
        distanceOptimale = arrondi( max / j )
     
        si ( distanceOptimale < 2 ) alors
            retourne 2
        fin si
     
        si ( (surface-max > distanceOptimale) ET (j*(distanceOptimale + 1) <= (max)) ) alors
            retourne distanceOptimale + 1;
        fin si
     
        retourne distanceOptimale
    fin fonction
    Et pour ceux que cela intéresse, voici l'algorithme permettant de placer ces joueurs sur la grille avec la distance optimal :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    distanceOptimale, max, x, y : entier
    grille[][] : Joueur // Type à adapter suivant le besoin
     
    distanceOptimale = obtenirDistanceOptimal(tailleDeLaGrille, nombreDeJoueur)
    max = tailleDeLaGrille - 1
     
    pour j allant de 1 à nombreDeJoueur, faire
        si ( x <  max ) alors
            si ( y < max ) alors
                si (y > 0) alors
                    x -= distanceOptimale +1
     
                    si ( x > max ) alors
                        y += x - max
                        x = max
                    sinon si ( x < 0 ) alors
                        y += x
                        x = 0
                    fin si
                sinon
                    x += distanceOptimale + 1
     
                    si ( x > max ) alors
                        y += x - max
                        x = max
                    fin si
     
            sinon
                x -= distanceOptimale +1
     
                si ( x > max ) alors
                    y += x - max
                    x = max
                sinon si ( x < 0 ) alors
                    y += x
                    x = 0
                fin si
            fin si
        sinon si ( y < max ) alors
            y += distanceOptimale +1
     
            si ( y > max ) alors
                x -= y - max
                y = max
            fin si
        sinon
            x -= distanceOptimale+1
        fin si
     
        grille[x][y] = nouveau Joueur()
    fin pour
    Voilà, en espérant que ce soit utile à d'autre également

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

Discussions similaires

  1. Calcul de distance entre deux points sur une carte ( openlayers)
    Par Atika90 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/08/2013, 16h27
  2. calcul de distance entre deux points.
    Par jamsgoodon dans le forum Bioinformatique
    Réponses: 0
    Dernier message: 31/05/2010, 15h06
  3. Extraire coordonnées entre deux points dans une image
    Par Pg043 dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 16/01/2009, 09h35
  4. mesure de distance entre 2 points dans une figure
    Par sdecorme dans le forum MATLAB
    Réponses: 4
    Dernier message: 04/07/2008, 19h51
  5. Calcul de distance entre deux points en WGS84
    Par marieR dans le forum Langage
    Réponses: 5
    Dernier message: 03/08/2006, 17h07

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