Pergunta

Estou trabalhando com uma grade hexagonal. Eu escolhi usar esse sistema de coordenadas porque é bastante elegante.

grid

Essa questão fala sobre a geração das próprias coordenadas e é bastante útil. Meu problema agora está convertendo essas coordenadas de e para coordenadas de pixels reais. Estou procurando uma maneira simples de encontrar o centro de um hexágono com coordenadas x, y, z. Suponha (0,0) nas coordenadas de pixels está em (0,0,0) em coordenados hexadecimais e que cada hexágono tenha uma borda de comprimento s. Parece -me que X, Y e Z devem mover minha coordenada uma certa distância ao longo de um eixo, mas eles estão inter -relacionados de uma maneira estranha que eu não consigo entender minha cabeça em torno dele.

Pontos de bônus se você puder seguir a outra direção e converter qualquer ponto (x, y) nas coordenadas de pixels para o hexadecimal que esse ponto pertence.

Foi útil?

Solução

Para maior clareza, deixe as coordenadas "hexagonais" estarem (r,g,b) Onde r, g, e b são as vermelho, verde, e azul coordenadas, respectivamente. As coordenadas (r,g,b) e (x,y) estão relacionados pelo seguinte:

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

Derivação:

  • Eu notei pela primeira vez que qualquer fila horizontal de hexágonos (que deve ter uma constante y-coordenado) tinha uma constante b coordenar, então y dependia apenas de b. Cada hexágono pode ser quebrado em seis triângulos equiláteis com lados de comprimento s; Os centros dos hexágonos em uma fila são de um e meio de comprimentos laterais acima/abaixo dos centros na próxima linha (ou, talvez mais fácil de ver, os centros em uma linha estão 3 comprimentos laterais acima/abaixo dos centros a duas fileiras de distância ), então para cada mudança de 1 dentro b, y mudanças 3/2 * s, dando a primeira fórmula. Resolvendo para b em termos de y dá a segunda fórmula.

  • Os hexágonos com um dado r A coordenada todos têm centros em uma linha perpendicular ao eixo R no ponto no r eixo que é 3/2 * s da origem (semelhante à derivação acima de y em termos de b). o r Eixo tem inclinação -sqrt(3)/3, então uma linha perpendicular a ela tem inclinação sqrt(3); o ponto no r eixo e na linha tem coordenadas (3sqrt(3)/4 * s * r, -3/4 * s * r); Então, uma equação em x e y para a linha que contém os centros dos hexágonos com r-coordenada r é y + 3/4 * s * r = sqrt(3) * (x - 3sqrt(3)/4 * s * r). Substituindo por y usando a primeira fórmula e resolvendo para x dá a segunda fórmula. (Não é assim que eu realmente derivei este, mas minha derivação foi gráfica com muita tentativa e erro e esse método algébrico é mais conciso.)

  • O conjunto de hexágonos com um dado r A coordenada é o reflexo horizontal do conjunto de hexágonos com essa coordenada G, então seja qual for a fórmula para o x coordenar em termos de r e b, a x coordenar para essa fórmula com g no lugar de r será o oposto. Isso dá a terceira fórmula.

  • A quarta e a quinta fórmulas vêm de substituir a segunda fórmula por b e resolver para r ou g em termos de x e y.

  • A fórmula final veio da observação, verificada pela álgebra com as fórmulas anteriores.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top