Hexagonal-Gitterkoordinaten zu Pixelkoordinaten
-
20-09-2019 - |
Frage
Ich arbeite mit einem hexagonalen Gitter. Ich habe entschieden, dieses Koordinatensystem zu verwenden, da es sehr elegant ist.
Diese Frage spricht über die Erzeugung der Koordinaten selbst, und ist sehr nützlich. Mein Problem ist jetzt in diesen Koordinaten und von den tatsächlichen Pixelkoordinaten umgewandelt wird. Ich bin auf der Suche nach einem einfachen Weg, um die Mitte eines Sechsecks mit den Koordinaten x, y, z zu finden. Es sei angenommen (0,0) in Pixelkoordinaten bei (0,0,0) in hex Koord und daß jedes Sechseck eine Kante der Länge s aufweist. Es scheint mir, wie x, y und z sollte jede Bewegung meiner einen bestimmten Abstand entlang einer Achse koordinieren, aber sie sind in einer ungeraden Art und Weise miteinander in Beziehung kann ich nicht ganz um sie meinen Kopf wickeln.
Bonuspunkte, wenn Sie in die andere Richtung gehen kann und wandeln jeden (x, y) Punkt in Pixelkoordinaten auf dem Hex dieser Punkt gehört in.
Lösung
Aus Gründen der Klarheit, lassen Sie die "hexagonal" Koordinaten sein (r,g,b)
wo r
, g
und b
sind die rot , grün und blau Koordinaten, respectively. Die Koordinaten (r,g,b)
und (x,y)
beziehen durch:
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
Ableitung:
-
I zum ersten Mal bemerkt, dass jede horizontale Reihe von Hexagonen eine Konstante
y
Koordinaten hatte (was eine konstanteb
-Koordinate haben soll), soy
nur aufb
abhing. Jedes Sechseck mit der Seitenlänges
in sechs gleichseitige Dreiecke unterteilt werden; die Mitten der Sechsecke in einer Reihe sind Eineinhalbseitenlängen oberhalb / unterhalb den Zentren in der nächsten Zeile (oder vielleicht einfacher zu sehen, die die Mittelpunkte in einer Reihe sind 3 Seitenlängen oberhalb / unterhalb den Zentren zwei Reihen entfernt ), so dass für jedes von1
Änderung inb
änderty
3/2 * s
, die erste Formel ergibt. Die Lösung fürb
in Bezug aufy
die zweite Formel gibt. -
Die Sechsecke mit einer gegebenen
r
aller Koordinaten haben Zentren auf einer Linie, die senkrecht zur R-Achse an dem Punkt auf derr
Achse, die3/2 * s
vom Ursprung (ähnlich die obigen Ableitungy
hinsichtlichb
) ist . Dier
Achse Steigung-sqrt(3)/3
, so dass eine Linie senkrecht zu dieser Steigungsqrt(3)
hat; der Punkt auf derr
Achse und auf der Linie hat die Koordinaten(3sqrt(3)/4 * s * r, -3/4 * s * r)
; so eine Gleichung inx
y
und für die Linie, die die Mitten der Sechsecke mitr
-Koordinater
enthält, isty + 3/4 * s * r = sqrt(3) * (x - 3sqrt(3)/4 * s * r)
. Setzt man füry
die erste Formel und die Lösung fürx
gibt die zweite Formel. (Dies ist nicht, wie ich abgeleitet eigentlich dieses, aber meine Ableitung war grafisch mit viel Versuch und Irrtum und diese algebraische Methode ist prägnanter.) -
Der Satz von Sechsecken mit einem gegebenen
r
Koordinate ist die horizontale Reflexion des Satzes von Hexagonen mit dieser g koordinieren, was so die Formel für diex
ist in Bezug aufr
undb
koordinieren, diex
Koordinate dass Formel mitg
anstelle vonr
wird das Gegenteil der Fall sein. Dies ergibt die dritte Formel. -
Die vierte und fünfte Formeln kommen, um die zweite Formel für
b
aus Substitution und Auflösen nachr
oderg
hinsichtlichx
undy
. -
Die endgültige Formel kam aus der Beobachtung, verifiziert durch Algebra mit den früheren Formeln.