48

六角形のグリッドを使用しています。非常にエレガントなため、この座標系を使用することにしました。

グリッド

この質問は、座標自体の生成について説明しており、非常に役立ちます。私の問題は、これらの座標を実際のピクセル座標との間で変換することです。座標がx、y、zの六角形の中心を見つける簡単な方法を探しています。ピクセル座標の(0,0)が16進座標の(0,0,0)にあり、各六角形のエッジの長さがsであると仮定します。x、y、zはそれぞれ座標を軸に沿って一定の距離だけ移動させる必要があるように思えますが、奇妙な方法で相互に関連しているため、頭を完全に包むことはできません。

反対方向に移動して、ピクセル座標の任意の(x、y)ポイントを、そのポイントが属する16進数に変換できる場合のボーナスポイント。

4

1 に答える 1

46

わかりやすくするために、「六角形」座標を(r,g,b)rgおよび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

導出:

  • 最初に気づいたのは、水平方向の六角形の列 (一定の - 座標を持つ必要がありますy) は一定のb座標を持つため、yのみに依存していたことbです。各六角形は、辺の長さが の 6 つの正三角形に分割できますs。1 つの行の六角形の中心は、次の行の中心よりも 1.5​​ 辺の長さ上/下にあります (または、おそらく見やすいように、1 つの行の中心は 2 行離れた中心の上下に 3 辺の長さです) )、したがって、 が変化するたびにが変化1b、最初の式が得られます。について解くと、2 番目の式が得られます。y3/2 * sby

  • 与えられた座標を持つ六角形はすべて、原点からの軸上の点rで r 軸に垂直な線上に中心を持っています(上記の に関する の導出と同様)。軸には傾きがあるため、軸に垂直な線には傾きがあります。軸上と線上の点には座標があります。したがって、 -座標の六角形の中心を含む直線の方程式は です。最初の式を使用して代入し、r3/2 * sybr-sqrt(3)/3sqrt(3)r(3sqrt(3)/4 * s * r, -3/4 * s * r)xyrry + 3/4 * s * r = sqrt(3) * (x - 3sqrt(3)/4 * s * r)yx2 番目の式が得られます。(これは私が実際にこれを導出した方法ではありませんが、私の導出は多くの試行錯誤を伴うグラフィカルなものであり、この代数的方法はより簡潔です。)

  • 与えられたr座標を持つ六角形のセットは、その g 座標を持つ六角形のセットの水平反射であるため、 と に関する座標の式が何であれ、 の代わりxにを使用したその式の座標は反対になります。これにより、3 番目の式が得られます。rbxgr

  • 4 番目と 5 番目の式は、2 番目の式を に代入し、またはをおよびに関してb解くことから得られます。rgxy

  • 最終的な式は観察から得られ、以前の式を使用して代数によって検証されました。

于 2010-03-17T02:24:30.223 に答える