Pregunta

Estoy trabajando con una rejilla hexagonal. He optado por utilizar este sistema de coordenadas, ya que es bastante elegante.

red

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.

¿Fue útil?

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 de b constante, por lo y dependido sólo de b. Cada hexágono se puede dividir en seis triángulos equiláteros con lados de longitud s; 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 de 1 en b, y cambia 3/2 * s, dando la primera fórmula. Resolviendo para b en términos de y 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 eje r que es 3/2 * s desde el origen (similar a la derivación por encima de y en términos de b) . El eje r tiene -sqrt(3)/3 pendiente, por lo que una línea perpendicular a ella tiene sqrt(3) pendiente; el punto en el eje r y en la línea tiene coordenadas (3sqrt(3)/4 * s * r, -3/4 * s * r); por lo que una ecuación en x y y para la línea que contiene los centros de los hexágonos con r coordenada r es y + 3/4 * s * r = sqrt(3) * (x - 3sqrt(3)/4 * s * r). Sustituyendo y utilizando la primera fórmula y resolviendo para x 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 la x de coordenadas en términos de r y b, coordinar la x para que fórmula con g en lugar de r 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 para r o g en términos de x y y.

  • La fórmula final se produjo a partir de la observación, verificado por el álgebra con las fórmulas anteriores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top