Question

Je travaille avec une grille hexagonale. Je l'ai choisi d'utiliser ce système de coordonnées, car il est assez élégant.

grille

Cette question parle de générer eux-mêmes coordonnées, et est tout à fait utile. Ma question est maintenant à convertir ces coordonnées et à partir des coordonnées de pixels réels. Je suis à la recherche d'un moyen simple de trouver le centre d'un hexagone de coordonnées x, y, z. Supposons (0,0) en coordonnées de pixel est le (0,0,0) dans coords hexagonaux, et en ce que chaque hexagone présente un bord de longueur s. Il me semble que x, y et z doivent chacun déplacer mes coordonnées une certaine distance le long d'un axe, mais ils sont liés entre eux d'une manière étrange, je ne peux pas tout à fait envelopper la tête autour d'elle.

Les points de bonus si on peut aller dans l'autre direction et convertir tout (x, y) le point de coordonnées de pixels de l'hexagone point appartient à.

Était-ce utile?

La solution

Pour plus de clarté, que les coordonnées se (r,g,b) "hexagonale" où r, g et b sont les rouge , vert et bleu les coordonnées, respectivement. Les coordonnées (r,g,b) et (x,y) sont liés par ce qui suit:

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

Dérivation:

  • I d'abord remarqué que toute rangée horizontale d'hexagones (qui doit avoir une y coordonnée constante) avait une b constante de coordonnées, de sorte que y dépendait uniquement sur b. Chaque hexagone peut être divisé en six triangles équilatéraux avec des côtés de longueur s; les centres des hexagones en une rangée sont une et demi secondaires longueurs ci-dessus / au-dessous des centres de la rangée suivante (ou, peut-être plus facile à voir, les centres d'une rangée sont 3 longueurs latérales au-dessus / au-dessous des centres de deux lignes de distance ), de sorte que pour chaque changement de 1 dans b, y change 3/2 * s, donnant à la première formule. La résolution de b en termes de y donne la seconde formule.

  • Les hexagones avec un r donné coordonner tous ont des centres sur une ligne perpendiculaire à l'axe de r du point sur l'axe de r qui est 3/2 * s de l'origine (similaire à la dérivation ci-dessus pour y en termes de b) . L'axe de r a une pente -sqrt(3)/3, de sorte qu'une ligne perpendiculaire à elle a une pente sqrt(3); le point situé sur l'axe de r et sur la ligne a des coordonnées (3sqrt(3)/4 * s * r, -3/4 * s * r); si une équation dans x et y la ligne contenant les centres des hexagones avec r de r coordonnée est y + 3/4 * s * r = sqrt(3) * (x - 3sqrt(3)/4 * s * r). Pour y en utilisant la substitution de la première formule et la résolution de x donne la seconde formule. (Ce n'est pas comment je tirais en fait celui-ci, mais ma dérivation était graphique avec beaucoup d'essais et d'erreurs et cette méthode algébrique est plus concise.)

  • L'ensemble des hexagones avec un r donné de coordonnées est le reflet horizontal de l'ensemble des hexagones avec cette g de coordonnées, de sorte que quelle que soit la formule est à la x de coordonnées en termes de r et b, la x de coordonnées pour que formule avec g à la place de r sera l'inverse. Cela donne la troisième formule.

  • Les quatrième et cinquième formules proviennent de son remplacement par la seconde formule pour b et en résolvant pour r ou g en termes de x et y.

  • La formule finale est venue de l'observation, l'algèbre vérifié par les formules précédentes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top