[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) |
RE: [Truc] Carte, Hexagones et Coordonnées - Meraxes - 15-08-2019 Bon, on va dire que je radote, que j'en fait des caisses et que je n'ai rien à faire de mes journées, mais j'aimerais juste préciser deux choses (que j'ai juste dit brièvement sur le discord hier). Par rapport aux INSERTS de la méthode utilisant une représentation avec GEOMETRY : Code : INSERT INTO geo (cx, cy, pt) VALUES (0, 0, POINT(0, 0)); En fait ça associe la case (x,y) au point de coordonée (x,y) sur le plan. C'est à dire que les cases sont tracées comme ça : OOOOO OOOOO OOOOO Alors que, tel que je l'ai compris moi, je pense qu'il faudrait plutôt les tracer comme ça, par exemple : OXOXO XOXOX OXOXO XOXOX OXOXO XOXOX C'est à dire que, pour l'un des quatre systèmes de coordonnées par offset : - la case (0,0) est bien associée au point (0,0) et la case (0,2) au point (0,2). - par contre la case (0,1) est associée au point (1,1) et la case (0,3) au point (1,3) Et là, on peut clairement voir apparaître des hexagones : X1X2X 6XOX3 X5X4X OX1XOX2XO XOXOXOXOX 6XOXOXOX3 XOXOXOXOX OX5XOX4XO Formé par les 6 points : (x-2D,y), (x-D,y-D), (x+D,y-D), (x+2D,y), (x+D,y+D), (x-D,y+D) Avec D la distance choisie. Et du coup on peut facilement faire le st_contains. En revanche, si on reste avec des points alignés, la zone à sélectionner pour le st_contains ne ressemble pas à grand chose, je pense : X2X3X 16054 XXXXX (Ici pour un hexagon de distance 1 centré sur le point 0, avec six points 1..6 pour l'un des quatre systèmes de coordonnées par offset.) Voilà pour mon interprétation ; ou alors je n'ai vraiment pas compris le but de la démarche. Par rapport aux index et aux perfs : Avec la méthode cubique, la distance est le max (pas au sens aggregat sql mais au sens greatest sql) des distances sur les 3 axes, qui est aussi la somme des distances divisée par 2. Si il y a un index sur (x,y,z), alors on peut donc l'utiliser en utilisant des ranges (à la place de abs() dans la clause WHERE, qui bloque l'utilisation de l'index) : SELECT x, y, greatest(abs(x-xp), abs(y-yp), abs(z-zp)) as distance FROM TableCase WHERE x between xpa and xpb AND y between ypa and ypb AND z between zpa and zpb; Avec : D la distance (xp,yp,zp) le point central Et : xpa = xp - D, xpb = xp + D ypa = yp - D, ypb = yp + D zpa = zp - D, zpb = zp + D Et cette utilisation d'index, justement, c'est quelque chose qu'il sera difficile de faire avec une table de type MaCase(cx, cy) qui contiendrait des coordonnées par offset, car les fonctions SQL à indexer seront plus complexes ; d'où l'intérêt d'utiliser des coordonnées cubiques à la place. |