JeuWeb - Crée ton jeu par navigateur
[Réglé]Distance entre 2 hexagones - 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 : [Réglé]Distance entre 2 hexagones (/showthread.php?tid=1312)

Pages : 1 2 3 4


RE: Distance entre 2 hexagones - Scha - 21-06-2007

Je crois que j'ai compris le principe, mais j'aurai souhaité ne pas faire de géométrie pour ne pas alourdir la tache du serveur. Néanmoins, ta solution est peut-être effectivement la plus efficace, ou, tout du moins, la plus évolutive.
Je ne sais pas trop comment "prendre les hexagones ou passe la droite", mais je suis peut-être trop fatigué. Merci, à bientôt.


RE: Distance entre 2 hexagones - denisc - 21-06-2007

Scha a écrit :Et bien nous voilà donc avec 2 belles solutions.
Pour l'heure, je vais utiliser celle de Denis, car en plus d'être élégante, je l'ai mise en oeuvre en 30 secondes sans rien modifier de ma map, et c'est parfaitement en place. Celle de Loetheri, parfaitement logique, peut probablement être utile dans un autre contexte.

[MAJ]
Après quelques tests plus poussés, je crois qu'il y a quelques anomalies dans la formule. Ex: les cases adjacentes 3,3 et 4,2 donnent : 2. Hum ça ne doit pas être bien grave. voyons...

J'ai trouvé pourquoi...
En fait, il faut décomposer le calcul. L'arrondi ne doit pas se faire à la fin, mais avant le calcul de la distance :

On prend dX et dY comme convenu plus haut.
Par contre, on prends dD = ENTIER (dY / 2) arrondi inférieur si dX paire et arrondi supérieur si dX impaire

D= dX + dY - dD
du coup, pour [3,3]=>[4,2] on a dX=1 impaire, dY=1 et dD=1
D=1+1-1=1

pour [3,0]=>[4,0] on a dX=1 impaire, dY=0 et dD=0
D=1+0-0=1

pour [2,0]=>[2,1] on a dX=0 paire, dY=1 et dD=0
D=0+1-0=0

pour [0,5] et [5,1] on a dX=5 impaire, dY=4 et dD=2
D=5+4-2=7

pour [0,5] et [5,2] on a dX=5 impaire, dY=3 et dD=2
D=5+3-2=6

pour [0,5] et [2,0] on a dX=2 paire, dY=5 et dD=2
D=2+5-2=5


RE: Distance entre 2 hexagones - denisc - 22-06-2007

On a donc les fonctions suivantes :

Code PHP :
<?php 
dX
= ABS( Xa - Xb );
dY = ABS( Ya - Yb );
if (
dX % 2 == 0 ) dD = ceil( dY / 2 );
else
dD = floor( dY / 2 );
D = dX + dY - dD;

Bonne journée


RE: Distance entre 2 hexagones - Scha - 22-06-2007

Hello,
Non, désolé, ça ne fonctionne pas. Sur le coup, j'ai aussi pensé a un pb d'arrondi, mais quand on teste 3,0 vers 3,4, cela donne 2, au lieu de 4. La formule doit donc être un peu plus complexe, c'est dommage, elle me plaisait bien comme ça.:-) Je ne vais pas lâcher l'affaire, on est pas loin du bon code. Merci.


RE: Distance entre 2 hexagones - denisc - 22-06-2007

On teste celui-ci???

Code PHP :
<?php 
dX
= ABS( Xa - Xb );
dY = ABS( Ya - Yb );
if (
dX ==0) dD = 0;
else if (
dX % 2 == 0 ) dD = ceil( dY / 2 );
else
dD = floor( dY / 2 );
D = dX + dY - dD;

Ce qyui permet de gérer le cas particulier du X constant


RE: Distance entre 2 hexagones - Scha - 22-06-2007

Prenons la case de départ A:2,2.
La case 1,1 est adjacente a A et donne : dX=1, dY=1
La case 3,1 n'est pas adjacente a A. Pourtant, elle donne aussi dX=1 et dY=1.

Il faut donc ajouter un paramètre à la formule, car dX et dY ne peuvent pas être suffisants... Mais je reconnais que je ne sais pas lequel... :-)
Merci de ta patience.


RE: Distance entre 2 hexagones - pascal - 22-06-2007

en utilisant la carte proposée par denis :

dX = Xa - Xb;
dY = Ya - Yb;
D = racine( dX * dX + dY * dY)
( arrondi à l'entier supérieur si on ne tombe pas sur un entier[/php] )

A+

Pascal


RE: Distance entre 2 hexagones - denisc - 22-06-2007

Ca ne marche pas non plus, qd dX = dY = 1, tu a D=2... Mais ça ne marche pas sur [1,1] [2,2] qui se touchent :/


RE: Distance entre 2 hexagones - pascal - 22-06-2007

denisc a écrit :Ca ne marche pas non plus, qd dX = dY = 1, tu a D=2... Mais ça ne marche pas sur [1,1] [2,2] qui se touchent :/


ça, c'est parce que le bord n'est pas droit.

A+

Pascal


RE: Distance entre 2 hexagones - denisc - 22-06-2007

En fait, j'ai fait quelques essais de calcul... Ma formule est correcte SAUF pour quelques cases adjacentes...