JeuWeb - Crée ton jeu par navigateur
[Truc] Carte, Hexagones et Coordonnées - 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 : [Truc] Carte, Hexagones et Coordonnées (/showthread.php?tid=4268)

Pages : 1 2 3 4 5


RE: [Truc] Carte, Hexagones et Coordonnées - Xenos - 14-04-2016

Citation :En fait c'est simplement la somme des coordonnées qui fait 0, pas leur soustraction.
Je ne vois pas comment ce serait possible, car cela interdirait tous les hexagones de [x>0, y>0, z>0]...

(Et c'est la raison pour laquelle je ne comprends pas trop pourquoi s'emmer*er avec une 3e coordonnée: sachant que X+Y-Z=0 donc que Z=X+Y, pourquoi se tapper une coordonnée "Z" redondante?!)


RE: [Truc] Carte, Hexagones et Coordonnées - niahoo - 14-04-2016

En fait la coordonnée Z est inversée, les positifs sont vers le bas. Du coup c'est plutot Y = -X-Z.

Cela permet de n'utiliser que deux coordonnées pour chaque hexagone, X et Z, puisque Y est calculable par les deux autres.

Mais pour tout ce qui est calcul de distance ou autres, utiliser 3 coordonnées permet d'utiliser un repère orthogonal en 3D en utilisant des cubes à la place des hexagones. Du coup on peut utiliser les formules toutes simples pour calculer les distance, par exemple
Code :
distance(Cube, Cube) :: Float
distance a b = (abs(a.x - b.x) + abs(a.y - b.y) + abs(a.z - b.z)) / 2

Je m'amuse à faire des cartes du coup, je pense faire un miniprojet sur carte hexa.

[Image: 9JrXkFx.png]


RE: [Truc] Carte, Hexagones et Coordonnées - Xenos - 14-04-2016

[Image: hex_xyz.jpg]
Heu, nope, Y=-X-Z ferait 1 = -0-1...ou 4 = -1-3 ou 2 = -(-1)-3 (partie droite)
Les formules données en premier post sont justes. Je ne sais pas si c'est la fatigue de la journée, mais tu t'embrouilles probablement pour rien (ou tu n'as pas pris le même repère) Smile

Quant au calcul de distance X²+Y²+(Z²/2)... Je ne vois pas trop où ton calcul nous mène.
J'ai complètement lu de travers la formule...!


RE: [Truc] Carte, Hexagones et Coordonnées - niahoo - 14-04-2016

Il n'utilises pas d'axe inversé sur son dessin, c'est ça qui fausse tout. Tu remarqueras qu'en changeant le sens d'un axe tu obtiendra cette propriété.

Là ma carte est en "flat-top" donc je vais parler du dessin de droite : Si par exemple tu inverses les Y, tu obtiens la propriété recherchée.

Du coup la case (0,0,0) reste inchangée, mais la case (-1,2,3) devient (-1,-2,3)

Ensuite, voilà où je veux en venir avec mon calcul :

Code :
distance(Cube, Cube) :: Float
distance a b = (abs(a.x - b.x) + abs(a.y - b.y) + abs(a.z - b.z)) / 2


distance (0,0,0) (-1,-2,3) = (abs(0 + 1) + abs(0 + 2) + abs(0 - 3)) / 2
    => 3

Les deux cases sont à 3 cases de distance.


(Aussi, pour moi un axe "X" vertical c'est pas possible ! C'est quasi épidermique Smile (Sur le premier dessin) )


RE: [Truc] Carte, Hexagones et Coordonnées - Xenos - 14-04-2016

Heu, oui, "ou tu n'as pas pris le même repère". Si t'as inversé Y, normal que *ta* formule soit inversée. Rowroll avait donc bien donné les bonnes infos et la bonne formule mais ton déterrage induirait en erreur les lecteurs.

Pour la formule, je l'avais mal lue (ce qui n'aide pas), mais à voir... L'égalité entre la moitié de la norme 1 (ta formule) et la norme infinie (celle de Rowroll) me surprend juste un peu.


RE: [Truc] Carte, Hexagones et Coordonnées - niahoo - 14-04-2016

Je réagissais par rapport à « Les coordonnées d'un hexagone ne sont valide que si X-Y-Z=0 ». Je viens de voir qu'il a corrigé les formules sans le dire. Ou bien c'est toi puisque je vois que tu as modifié son message il y a quelques minutes (de la part d'un modo je trouve qu'il est de bon ton de laisser une marque quand on corrige un post d'un user mais bon … ça sent la mauvaise foi cette histoire)

Du coup j'ai trouvé une logique dans laquelle ce type d'assertion tombe juste, en changeant effectivement de repère.

Sinon pour les normes (bon moi je sais même pas ce qu'est une norme mais allons-y) ma formule calcule la distance de Manhattan entre deux centres de cubes dans un espace à 3 dimensions. Le fait que le max() de la distance sur une seule coordonnée je ne sais pas trop d'où ça vient, mais le fait qu'on ne puisse pas se déplacer selon un seul axe (3D) pourrait aider.

J'avais trouvé un énorme tuto sur tout ça, il faudrait que je le poste, il y avait vraiment tout !


RE: [Truc] Carte, Hexagones et Coordonnées - Xenos - 14-04-2016

J'ai viré une parenthèse fermante en trop dans les formules de la distance, et corrigé le "Y" pour Z" car Rowroll a écrit "X+Y-Y" au lieu de "X+Y-Z". J'ai pas jugé nécessaire de faire une note de service pour informer la planète entière.
Pour les deux schémas, ta formule est fausse puisque tu as pris un autre repère (où Z est inversé). Donc, désolé pour l'ambiance, mais la mauvaise foi du peux te la remettre en poche: tu t'es planté, autant le dire plutôt que te t'enfoncer (tu m'en avais déjà fait la remarque à raison Smile )


Sinon, il traine sur le forum un tuto sur les cartes hexa, en cherchant, cela doit se trouver (c'est peut-être le même tuto auquel tu penses). Et "[i]la distance de Manhattan est définie par d(A,B)=|X_B-X_A|+|Y_B-Y_A| Autrement dit : c'est la distance associée à la norme 1.". La question de démontrer pourquoi les deux normes (1 et infini) sont égales reste entière hmm...


RE: [Truc] Carte, Hexagones et Coordonnées - MadMass - 14-04-2016

Y'a plus qu'à coder un civilization et on est bons ^^


RE: [Truc] Carte, Hexagones et Coordonnées - niahoo - 14-04-2016

hum oui j'ai surement inventé cette citation a l'époque alors, très crédible.

Bref, ce que je décris est cohérent et fonctionne bien Smile


RE: [Truc] Carte, Hexagones et Coordonnées - Xenos - 14-04-2016

J'ai du mal à me représenter la raison géométrique, mais effectivement, analytiquement, |x|+|y|+|x+y| = 2*max(|x|, |y|, |x+y|) quelque soient X et Y (et donc, avec Z=X+Y, on retombe sur la formule précédente).