Coordenadas de la cuadrícula hexagonal Para coordenadas de píxeles
-
20-09-2019 - |
Pregunta
Estoy trabajando con una rejilla hexagonal. He optado por utilizar este sistema de coordenadas, ya que es bastante elegante.
Esta pregunta habla de la generación de los propios coordenadas, y es bastante útil. Mi problema ahora es convertir estas coordenadas desde y hacia las coordenadas de píxeles reales. Busco una forma sencilla de encontrar el centro de un hexágono con coordenadas x, y, z. Supongamos (0,0) en coordenadas de píxeles está en (0,0,0) en coords hexagonales, y que cada hexágono tiene un borde de longitud s. Me parece como x, y, z debe mover mi cada coordenada de una cierta distancia a lo largo de un eje, sino que están relacionados entre sí de un modo extraño yo no puedo envolver mi cabeza alrededor de ella.
Los puntos de bonificación si se puede ir la otra dirección y convertir cualquier (x, y) el punto en coordenadas de píxeles a la hexagonal que pertenece el punto de.
Solución
Para mayor claridad, que el "hexagonal" coordenadas se (r,g,b)
donde r
, g
y b
son los rojo , verde y azul coordina, respectivamente. El (r,g,b)
coordenadas y (x,y)
están relacionadas por la siguiente:
y = 3/2 * s * b
b = 2/3 * y / s
x = sqrt(3) * s * ( b/2 + r)
x = - sqrt(3) * s * ( b/2 + g )
r = (sqrt(3)/3 * x - y/3 ) / s
g = -(sqrt(3)/3 * x + y/3 ) / s
r + b + g = 0
Derivación:
-
Primero me di cuenta de que cualquier fila horizontal de hexágonos (que debe tener una constante
y
coordenada) tenía una coordenada deb
constante, por loy
dependido sólo deb
. Cada hexágono se puede dividir en seis triángulos equiláteros con lados de longituds
; los centros de los hexágonos en una fila son uno y medio secundarios longitudes por encima / por debajo de los centros en la siguiente fila (o, quizás más fácil de ver, los centros en una fila son 3 longitudes de los lados de arriba / debajo de los centros de dos filas de distancia ), así que para cada cambio de1
enb
,y
cambia3/2 * s
, dando la primera fórmula. Resolviendo parab
en términos dey
da la segunda fórmula. -
Los hexágonos con un
r
coordenada dada todos tienen centros en una línea perpendicular al eje r en el punto en el ejer
que es3/2 * s
desde el origen (similar a la derivación por encima dey
en términos deb
) . El ejer
tiene-sqrt(3)/3
pendiente, por lo que una línea perpendicular a ella tienesqrt(3)
pendiente; el punto en el ejer
y en la línea tiene coordenadas(3sqrt(3)/4 * s * r, -3/4 * s * r)
; por lo que una ecuación enx
yy
para la línea que contiene los centros de los hexágonos conr
coordenadar
esy + 3/4 * s * r = sqrt(3) * (x - 3sqrt(3)/4 * s * r)
. Sustituyendoy
utilizando la primera fórmula y resolviendo parax
da la segunda fórmula. (Esto no es como en realidad I derivado de éste, pero mi derivación estaba gráfica con una gran cantidad de ensayo y error y este método algebraico es más conciso.) -
El conjunto de hexágonos con una
r
dado de coordenadas es el reflejo horizontal del conjunto de hexágonos con las que g de coordenadas, así que lo que la fórmula es para lax
de coordenadas en términos der
yb
, coordinar lax
para que fórmula cong
en lugar der
será el opuesto. Esto le da a la tercera fórmula. -
Las fórmulas cuarto y quinto provienen de la sustitución de la segunda fórmula para
b
y resolviendo parar
og
en términos dex
yy
. -
La fórmula final se produjo a partir de la observación, verificado por el álgebra con las fórmulas anteriores.