Coordonnées Du Quadrillage Hexagonal En Pixels

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

grid

Cette question parle de générer les coordonnées eux-mêmes, et est très utile. Mon problème maintenant est de convertir ces coordonnées et réelle des coordonnées en pixels. Je cherche un moyen simple de trouver le centre d'un hexagone avec les coordonnées x,y,Z. Supposons (0,0) en coordonnées pixel est à (0,0) en hexagones, et que chaque hexagone a un bord de longueur S. Il me semble que x, y, et z devraient chacun déplacer ma coordonnée une certaine distance le long d'un axe, mais ils sont interdépendants d'une manière étrange Je ne peux pas tout à fait envelopper ma tête autour de lui.

points Bonus si vous pouvez aller dans l'autre direction et convertir n'importe quel (x,y) point en coordonnées pixel à l'hexagone que le point appartient.

42
demandé sur Community 2010-03-17 04:43:38

1 réponses

pour plus de clarté, que les coordonnées" hexagonales "soient (r,g,b)r , g , et b sont les coordonnées rouge , Vert , et bleu , respectivement. Les coordonnées (r,g,b) et (x,y) sont liées 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:

  • j'ai d'abord remarquez que n'importe quelle rangée horizontale d'hexagones (qui devrait avoir une constante y -coordonnée) avait une constante b coordonnée, donc y dépendait seulement de b . Chaque hexagone peut être divisé en six triangles équilatéraux avec les côtés de la longueur s ; les centres des hexagones dans une rangée sont un et demi-longueurs de côté au-dessus / au-dessous des centres dans la rangée suivante (ou, peut-être plus facile à voir, les centres dans une rangée sont 3 longueurs de côté au-dessus/au-dessous des centres deux rows away), donc pour chaque changement de 1 dans b , y change 3/2 * s , donnant la première formule. La résolution pour b en termes de y donne la deuxième formule.

  • les hexagones avec une coordonnée donnée r ont tous des centres sur une ligne perpendiculaire à l'axe r au point sur l'axe r qui est 3/2 * s de l'origine (similaire à la dérivation ci-dessus de y en termes de b ). L'axe r a la pente -sqrt(3)/3 , ainsi une ligne perpendiculaire à elle a la pente sqrt(3) ; le point sur l'axe r et sur la ligne a les coordonnées (3sqrt(3)/4 * s * r, -3/4 * s * r) ; ainsi une équation dans x et y pour la ligne contenant les centres des hexagones avec r - coordonnée r est y + 3/4 * s * r = sqrt(3) * (x - 3sqrt(3)/4 * s * r) . La substitution de y par la première formule et la résolution de x donne la deuxième formule. (Ce n'est pas comme ça que j'ai dérivé celle-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 une coordonnée donnée r est la réflexion horizontale de l'ensemble des hexagones avec cette coordonnée g, donc quelle que soit la formule pour la coordonnée x en termes de r et b , la coordonnée x pour cette formule avec g au lieu de r sera l'inverse. Cela donne la troisième formule.

  • les quatrième et cinquième formules proviennent de la substitution de la deuxième formule pour b et de la résolution pour r ou g en termes de x et y .

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

38
répondu Isaac 2013-05-12 22:58:29