Salut,
ne levez pas vos boucliers de feu, mais 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.
Pour ma part, les cartes gagneraient à se présenter sous la forme d'un graphe, dont les noeuds sont les cases et dont les liens représentent les voisinages entre les cases, chaque case étant définie par une forme de base (carré, hexagone, pentagone, etc), une taille (qui peut ne pas être la même selon X et Y), à la limite, un angle de rotation, et par 2 coordonnées qui donnent la position du centre de la case.
Dans le cas d'une carte hexagonale, le maillage serait alors similaire à ceci:
[image supprimée depuis]
Le repère est donc orthogonal, mais ici non orthonormal (la distance entre x,y et x+1,y est différente de celle entre x,y et x,y+1). Chaque case est repérée par deux coordonnées X,Y entières. On se trouve à coup sûr au centre d'un hexagone si la parité de x est égale à celle de y, sinon, on est exactement entre deux hexagones (0,0 est un hexagone, 2,0 aussi, 0,2 aussi, mais 2,1 tombe sur une ligne entre deux hexagones).
Le repère étant orthogonal, le calcul de distance est assez aisé (il ne faut pas oublier le facteur d'échelle du à l'étirement selon X ou Y c'est à dire dû au fait que la distance le long de X n'est pas la même que celle le long de Y). Le tracé de ligne est également aisé, puisqu'on a un repère orthogonal 2D classique. Le seul défaut est vraiment la non-orthonormalité, qui transformerait par exemple le cercle de centre 0,0 et de rayon 4 en un ovale lorsqu'on l'affiche...
Le repère pourrait être orthonormalisé, puisque la distance entre deux segments vert (sur l'image) est 2*r alors qu'entre deux segments bleus, il y a 3/2*r, avec r le rayon de l'hexagone. Au lieu de -1, 0, 1, ... pour les axes verts, il faudrait alors utiliser les coordonnées -2, 0, 2... (autrement dit, l'axe est de longueur égale à r) et pour les axes bleus, 0, 3, 6, 9... (la longueur de l'axe est alors aussi r), et on a un repère orthonormé usuel.
Je ferai une étude plus claire et plus pratique qu'un simple post de forum sur ce type de maps (car le problème va se poser sur ECLERD). Je le laisserai sur la tasklist reinom ( https://reinom.com/tasks ), il sera consultable librement (dans les rapports des tâches réalisés).
ne levez pas vos boucliers de feu, mais 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.
Pour ma part, les cartes gagneraient à se présenter sous la forme d'un graphe, dont les noeuds sont les cases et dont les liens représentent les voisinages entre les cases, chaque case étant définie par une forme de base (carré, hexagone, pentagone, etc), une taille (qui peut ne pas être la même selon X et Y), à la limite, un angle de rotation, et par 2 coordonnées qui donnent la position du centre de la case.
Dans le cas d'une carte hexagonale, le maillage serait alors similaire à ceci:
[image supprimée depuis]
Le repère est donc orthogonal, mais ici non orthonormal (la distance entre x,y et x+1,y est différente de celle entre x,y et x,y+1). Chaque case est repérée par deux coordonnées X,Y entières. On se trouve à coup sûr au centre d'un hexagone si la parité de x est égale à celle de y, sinon, on est exactement entre deux hexagones (0,0 est un hexagone, 2,0 aussi, 0,2 aussi, mais 2,1 tombe sur une ligne entre deux hexagones).
Le repère étant orthogonal, le calcul de distance est assez aisé (il ne faut pas oublier le facteur d'échelle du à l'étirement selon X ou Y c'est à dire dû au fait que la distance le long de X n'est pas la même que celle le long de Y). Le tracé de ligne est également aisé, puisqu'on a un repère orthogonal 2D classique. Le seul défaut est vraiment la non-orthonormalité, qui transformerait par exemple le cercle de centre 0,0 et de rayon 4 en un ovale lorsqu'on l'affiche...
Le repère pourrait être orthonormalisé, puisque la distance entre deux segments vert (sur l'image) est 2*r alors qu'entre deux segments bleus, il y a 3/2*r, avec r le rayon de l'hexagone. Au lieu de -1, 0, 1, ... pour les axes verts, il faudrait alors utiliser les coordonnées -2, 0, 2... (autrement dit, l'axe est de longueur égale à r) et pour les axes bleus, 0, 3, 6, 9... (la longueur de l'axe est alors aussi r), et on a un repère orthonormé usuel.
Je ferai une étude plus claire et plus pratique qu'un simple post de forum sur ce type de maps (car le problème va se poser sur ECLERD). Je le laisserai sur la tasklist reinom ( https://reinom.com/tasks ), il sera consultable librement (dans les rapports des tâches réalisés).