JeuWeb - Crée ton jeu par navigateur
Problème de calcule de distance - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Problème de calcule de distance (/showthread.php?tid=4978)

Pages : 1 2


Problème de calcule de distance - phenix - 10-07-2010

Hello tout le monde,

Sa fait un moment que je suis pas venu, la faute aux études.
Mais c'est les vacances et la vallée des larmes est de nouveau sur les rails !

Je viens avec un problème de calcule de distance entre 2 cases X/Y, un problème tout bête que je pensais résolut en utilisant cette formule:

hypot( X1-X2, Y1-Y2) = distance

En effet, cela fonctionne, sauf pour les cases en diagonales, qui me donnent des nombres à virgules.
Quelqu'un connait une solution ?

Merci d'avance de votre aide.


RE: Problème de calcule de distance. - atra27 - 10-07-2010

Code PHP :
<?php 
$distance
=intval(sqrt(pow($dest['x']-$depart['x'],2)+pow($dest['y']-$depart['y'],2)));
C'est des maths Wink
Calcul de la distance entre deux points dans un repère orthonormé!


RE: Problème de calcule de distance. - phenix - 10-07-2010

J'ai déjà tenté cette formule, malheureusement elle me fait le même bug Smile

Merci quand même.


RE: Problème de calcule de distance. - Foxglove - 10-07-2010

Ca dépend aussi du type de déplacements que tu considères.

Si ton personnage peut se déplacer dans 8 directions (incluant les diagonales), tu peux utiliser la formule donnée par atra27 :
distance = racine( (x2-x1)^2 + (y2-y1)^2 )

Si ton personnage ne peut se déplacer que dans 4 directions, tu peux utiliser une formule encore plus simple :
distance = abs(x2-x1) + abs(y2-y1)

Si ça ne répond pas à ta question, il faudrait la clarifier. Quel est le vrai problème dont tu parles ? Tu veux transformer un nombre à virgule en nombre entier ? Tu veux la partie entière supérieure ? La partie entière inférieure ? Tu as un exemple de ce que tu as et de ce que tu veux ?


RE: Problème de calcule de distance. - atra27 - 10-07-2010

Normal que tu aie des nombres a virgule en diagonale.
Si tu prend des carrés de coté 1, alors en horizontal vertical tu aura des multiples de 1! (logique)
Mais en diagonale, par exemple si tu prend un angle de 45° (le cas le plus simple), la distance pour 1 case de décalage est racine de 1 (chiffre a virgule donc!)

Mon seul conseil est d'arrondir ton résultat. J'utilise intval dans l'exemple mais a toi de voir quelle fonction tu souhaite utiliser...


RE: Problème de calcule de distance. - Ter Rowan - 10-07-2010

(10-07-2010, 05:29 PM)Foxglove a écrit : Ca dépend aussi du type de déplacements que tu considères.

Si ton personnage peut se déplacer dans 8 directions (incluant les diagonales), tu peux utiliser la formule donnée par atra27 :
distance = racine( (x2-x1)^2 + (y2-y1)^2 )

Si ton personnage ne peut se déplacer que dans 4 directions, tu peux utiliser une formule encore plus simple :
distance = abs(x2-x1) + abs(y2-y1)

+1 avec une précision : dans un repère orthonormé (comme un échiquier quoi)

ta carte est comment ? si hexagonale, c'est autrement par exemple (même si je ne connais pas la formule par coeur)

de même précise la notion de "distance", parce que si tu entends distance = nombre minimum de mouvement pour arriver à tel endroit, il faut que tu donnes les règles de :

repère (échiquier, hexagonal, etc...)
déplacement (genre la diagonale est elle plus longue que l horizontale)


RE: Problème de calcule de distance - phenix - 10-07-2010

Voici un schéma du problème, les 4 en rouge sont bien sur les biug quand j'utilise cette formule:

Code PHP :
<?php 
$distance
=intval(sqrt(pow($dest['x']-$depart['x'],2)+pow($dest['y']-$depart['y'],2)));

En virant le intval on ce rend compte que sur cette case, la valeur est de 4,2 (et le reste).

Je sais pas trop par quel bout prendre ce problème, si quelqu'un connait connait la solution Smile

Merci d'avance.


RE: Problème de calcule de distance - nicodd - 10-07-2010

Le résultat est tout à fait logique, cette case est plus loin que celle qui vaut 3 en plein milieu.

Comme dit plus haut, explique comment tu souhaite définir tes distances, parce que visiblement tu t'y prends mal.

Quels sont les mouvements permis ?


RE: Problème de calcule de distance - phenix - 10-07-2010

Citation :Quels sont les mouvements permis ?

Tous, tout simplement.

normalement, la case avec le 4 est un 3 puisque la diagonale la plus directe est a 3 case de 0.


RE: Problème de calcule de distance - nicodd - 10-07-2010

Ok, c'est simple alors :

$distance=max($dest['x']-$depart['x'], $dest['y']-$depart['y']);

EDIT, c'est plutôt :

$distance=max(abs($dest['x']-$depart['x']), abs($dest['y']-$depart['y']));