20-11-2012, 10:26 PM
(Modification du message : 21-11-2012, 02:11 PM par Thêta Tau Tau.)
Je pige pas pourquoi vous vous emmerdez, deux axes formant un angle de 120° ou 60°, c'est pas sorcier.
Soit i la distance en pixels entre les centres de deux hexagones qui se touchent.
Conversion dans un repère orthonormal (l'écran du client) :
x' = i*3^0.5/2*x
y' = i*(y - x/2)
Distance
On converti dans le repère orthonormal, puis Pythagore, on développe et :
d = i * ( x² + y² - x*y)^0.5
(c'est la distance à vol d'oiseau, pour la distance case par case cf. le post de Roworll).
Bonus :
On peut représenter les coordonnées dans une matrice (à droite dans mon image), les traits rouges tracés à l'arrache montrent les déplacements possible.
Du coup on peut stocker la carte dans une image.
PS : j'ai calculé les formules à l'arrache, pas sur que ce soit juste, mais ça a l'air de marcher.
Je viens de piger ce que tu comprends pas Xenos :
En fait on utilise pas un repère à trois coordonnées mais 3 repères à 2 coordonnées ( x,y y,z et x,z) et on utilise celui qui est le plus pratique selon les situations. Du coup il n'y a bien qu'une coordonnée possible.
Mais perso je préfère pas utiliser l'axe Z, sauf pour le calcul de distance "case par case" où il est indispensable. Le reste du temps il ne sert qu'à simplifier les formules.
Soit i la distance en pixels entre les centres de deux hexagones qui se touchent.
Conversion dans un repère orthonormal (l'écran du client) :
x' = i*3^0.5/2*x
y' = i*(y - x/2)
Distance
On converti dans le repère orthonormal, puis Pythagore, on développe et :
d = i * ( x² + y² - x*y)^0.5
(c'est la distance à vol d'oiseau, pour la distance case par case cf. le post de Roworll).
Bonus :
On peut représenter les coordonnées dans une matrice (à droite dans mon image), les traits rouges tracés à l'arrache montrent les déplacements possible.
Du coup on peut stocker la carte dans une image.
PS : j'ai calculé les formules à l'arrache, pas sur que ce soit juste, mais ça a l'air de marcher.
Je viens de piger ce que tu comprends pas Xenos :
(20-11-2012, 06:21 PM)Xenos a écrit : je trouve la méthode assez mauvaise, car on utilise 3 coordonnés pour désigner un point d'un plan qui est en 2D. Il y a donc une coordonnée de trop. De fait, chaque hexagone possède, en pratique, une infinité de coordonnées, ce qui risque de poser de gros soucis pour savoir si deux coordonnées sont égales.
En fait on utilise pas un repère à trois coordonnées mais 3 repères à 2 coordonnées ( x,y y,z et x,z) et on utilise celui qui est le plus pratique selon les situations. Du coup il n'y a bien qu'une coordonnée possible.
Mais perso je préfère pas utiliser l'axe Z, sauf pour le calcul de distance "case par case" où il est indispensable. Le reste du temps il ne sert qu'à simplifier les formules.