六角网格坐标到像素坐标

cap*_*aig 45 math hexagonal-tiles coordinate-systems

我正在使用六边形网格.我选择使用这个坐标系,因为它非常优雅.

格

这个问题谈论自己生成坐标,非常有用.我现在的问题是将这些坐标转换为实际像素坐标.我正在寻找一种简单的方法来找到坐标为x,y,z的六边形的中心.假设像素坐标中的(0,0)在六角形坐标中为(0,0,0),并且每个六边形具有长度为s的边缘.在我看来,像x,y和z每个都应该沿轴线移动我的坐标一定距离,但是它们以奇怪的方式相互关联,我无法将头围绕在它周围.

如果你可以转向另一个方向并将像素坐标中的任何(x,y)点转换为该点所属的十六进制,则可以获得奖励积分.

Isa*_*aac 41

为了清楚起见,让"六角"的坐标是(r,g,b)哪里r,g以及b红色,绿色蓝色的坐标.坐标(r,g,b)(x,y)以下内容相关:

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
Run Code Online (Sandbox Code Playgroud)

推导:

  • 我首先注意到任何水平行的六边形(应该有一个恒定的y坐标)都有一个恒定的b坐标,所以y只依赖于它b.每个六边形可以分成六个等边三角形,边长s; 一排六边形的中心是下一排中心上方/下方的一半半长度(或者,或许更容易看到,一排中心是中心上方/下方两侧的3个边长),所以对于每个变化1b,y变化3/2 * s,给第一个公式.求解b在以下方面y给出第二公式.

  • 与给定的六边形r坐标都在一条线上的中心垂直于在点r轴r即轴3/2 * s从原点(类似于上面的推导y中的术语b).该r轴具有斜率-sqrt(3)/3,所以垂直于它具有斜率的线sqrt(3); 在点r轴和上线具有坐标(3sqrt(3)/4 * s * r, -3/4 * s * r); 因此,在一个方程式xy用于容纳六角形的中心与线r-协调ry + 3/4 * s * r = sqrt(3) * (x - 3sqrt(3)/4 * s * r).替代y使用第一个公式并求解x给出第二个公式.(这不是我实际上得出这个的方法,但我的推导是图形化的,有很多试验和错误,这种代数方法更简洁.)

  • 具有给定r坐标的六边形集合是具有该g坐标的六边形集合的水平反射,因此无论该坐标的公式是什么x,r并且该公式bx坐标g代替r将是相反的.这给出了第三个公式.

  • 第四和第五个公式来自于用第二个公式代替b和求解rgxy.

  • 最终公式来自观察,由代数用早期的公式验证.

  • 顺便说一下,r,g和b中的任何两个足以定位一个独特的六边形/点. (4认同)
  • @Jason S:不,有一个y公式(仅取决于b),但是有两个x公式,一个使用b和r,一个使用b和g。 (2认同)