A grade hexagonal coordena para coordenadas de pixels
-
20-09-2019 - |
Pergunta
Estou trabalhando com uma grade hexagonal. Eu escolhi usar esse sistema de coordenadas porque é bastante elegante.
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.
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 constanteb
coordenar, entãoy
dependia apenas deb
. Cada hexágono pode ser quebrado em seis triângulos equiláteis com lados de comprimentos
; 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 de1
dentrob
,y
mudanças3/2 * s
, dando a primeira fórmula. Resolvendo parab
em termos dey
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 nor
eixo que é3/2 * s
da origem (semelhante à derivação acima dey
em termos deb
). or
Eixo tem inclinação-sqrt(3)/3
, então uma linha perpendicular a ela tem inclinaçãosqrt(3)
; o ponto nor
eixo e na linha tem coordenadas(3sqrt(3)/4 * s * r, -3/4 * s * r)
; Então, uma equação emx
ey
para a linha que contém os centros dos hexágonos comr
-coordenadar
éy + 3/4 * s * r = sqrt(3) * (x - 3sqrt(3)/4 * s * r)
. Substituindo pory
usando a primeira fórmula e resolvendo parax
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 ox
coordenar em termos der
eb
, ax
coordenar para essa fórmula comg
no lugar der
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 parar
oug
em termos dex
ey
.A fórmula final veio da observação, verificada pela álgebra com as fórmulas anteriores.