2011-09-12 18 views
18

Tenemos un latice hexagonal:¿cuál es la mejor manera de representar latice hexagonal

_ _ _ 
/\_/ \_/ \_ 
\_/ \_/ \_/ \ 
/\_/ \_/ \_/ 
\_/ \_/ \_/ 

¿Cuál es la mejor manera de representar con 2 dimensiones matriz o lo que sea

+0

¿Le interesa nodos o las zonas? –

+2

¿qué estás buscando representar? un enrejado infinito? ¿un enrejado finito de forma rectangular? datos en los vértices? datos en los bordes? –

+4

Ver [Un hexágono inclinado] (http://ferkeltongs.livejournal.com/31455.html) y [Pensamientos de Amit en las grillas] (http://www-cs-students.stanford.edu/~amitp/game-programming/grids /) –

Respuesta

12

La forma más sencilla de representar una la cuadrícula hexagonal con una matriz 2D es sesgar los ejes: cada fila de hexágonos se compensa medio paso más que la anterior. No importa si cada fila se desplaza hacia delante o hacia atrás, siempre que sea coherente al respecto; a continuación, cada fila sucesiva se compensa la mitad de un hexágono hacia adelante:

(0,0) (0,1) (0,2) (0,3) (0,4) 

    (1,0) (1,1) (1,2) (1,3) (1,4) 

     (2,0) (2,1) (2,2) (2,3) (2,4) 

     (3,0) (3,1) (3,2) (3,3) (3,4) 

Es fácil determinar los vecinos más cercanos de cualquier hexágono dado: en el caso anterior, para una dirección de matriz dada (r,s), usted tiene:

(r-1, s) 
(r-1, s+1) 
(r, s-1) 
(r, s+1) 
(r+1, s-1) 
(r+1, s) 

Además, tenga en cuenta que el dibujo ubicación es simple: el centro del hexágono (r,s) anterior es en la ubicación de la pantalla:

x= dx * (s + 0.5*r) 
y= dy * r 

Como alternativa, puede compensar filas alternativas por medio hex absoluto. Esto le dará una forma más rectangular para una matriz determinada, pero determinar la ubicación del dibujo y los vecinos más cercanos requeriría dos casos, para las filas pares e impares, respectivamente.

Existen otros sistemas de coordenadas disponibles, pero son menos conveniente y más oscura ...


Dado que el PO quiere más, voy a añadir un enlace a mi sistema de indexación hexagonal oscura favorita: una "spiral honeycomb mosaic". Este utiliza un sistema de base y siete para indexar sucesivamente más grandes grupos "super-hexágono" de ubicaciones hexagonales, como sigue (en cuenta que está marcado en la base-7, no de base diez):

7 elements:    49 elements: 

    2 3 
          22 23 
1 0 4 --> 
        12 13 21 20 24 
    6 5 
       11 10 14 26 25 32 33 

        16 15 02 03 31 30 34 --> [3 base-7 digits 
                -> 343 elements...] 
       62 63 01 00 04 36 35 

       61 60 64 06 05 42 43 

       66 65 52 53 41 40 44 

         51 50 54 46 45 

         56 55 

El enlace tiene algún código para tratar con este sistema de coordenadas, pero realmente no he intentado evaluarlo ...

+0

su solución en realidad no representa el enrejado que se muestra en la respuesta; se rota 90 grados. el enrejado de la pregunta no tiene vecinos directamente horizontales, pero sí tiene los verticales. –

+0

@andrew cooke: ¿De verdad? sentirse un poco exigente hoy ¿verdad? :-) Probablemente fue más fácil dibujar la imagen en ascii. Uno ciertamente puede intercambiar los roles de rys e invertir la imagen ... – phkahler

+0

Estaba pensando r = rows y s = skewed-columns; La convención de matriz estilo C generalmente es A [fila] [columna] de todos modos. Por supuesto, como dice phkahler, puedes dibujarlo como quieras ... – comingstorm

2

Un 2d matriz está bien usando 2 filas = 1 altura hex, y 1 columna = 1 ancho hex.

4,1,5,2,6,3 
4,7,5,8,6,9 
A,7,B,8,C,9 
A,D,B,E,C,F 
  • Cada par de números es 1 baldosa hexagonal.
  • Encontrar 12 y seis es sólo un + -Y hasta que en una ficha diferente
  • Conclusión 2 y cuatro
    • Comprobar si Y + 1 es el mismo azulejo
      • Si lo es, las 2 en punto es X + 1 & 4 en punto es X + 1, Y + 1
      • Si no lo es, 2 en punto es X + 1, Y-1 & 4 o ' el reloj es X + 1
+0

¡gracias! ¡Eso es muy inusual! – Eugeny89

+0

Otra forma de pensar sobre este patrón es: tomar un enrejado cuadrado y soltar la mitad de las coordenadas según la paridad (por ejemplo, solo aceptar/usar esas coordenadas '(x, y)' de modo que 'x + y' sea par). Por supuesto, no desea perder la mitad de las entradas de la matriz, por lo tanto, el acuerdo de @ LastCoder anterior. – comingstorm

3

hay cuatro manera diferente para representar un Hextile en las memorias:

enter image description here

Cuestiones relacionadas