Frage

Ich arbeite mit einem hexagonalen Gitter. Ich habe entschieden, dieses Koordinatensystem zu verwenden, da es sehr elegant ist.

Raster

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.

War es hilfreich?

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 konstante b-Koordinate haben soll), so y nur auf b abhing. Jedes Sechseck mit der Seitenlänge s 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 von 1 Änderung in b ändert y 3/2 * s, die erste Formel ergibt. Die Lösung für b in Bezug auf y 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 der r Achse, die 3/2 * s vom Ursprung (ähnlich die obigen Ableitung y hinsichtlich b) ist . Die r Achse Steigung -sqrt(3)/3, so dass eine Linie senkrecht zu dieser Steigung sqrt(3) hat; der Punkt auf der r Achse und auf der Linie hat die Koordinaten (3sqrt(3)/4 * s * r, -3/4 * s * r); so eine Gleichung in x y und für die Linie, die die Mitten der Sechsecke mit r-Koordinate r enthält, ist y + 3/4 * s * r = sqrt(3) * (x - 3sqrt(3)/4 * s * r). Setzt man für y die erste Formel und die Lösung für x 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 die x ist in Bezug auf r und b koordinieren, die x Koordinate dass Formel mit g anstelle von r 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 nach r oder g hinsichtlich x und y.

  • Die endgültige Formel kam aus der Beobachtung, verifiziert durch Algebra mit den früheren Formeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top