2010年11月6日土曜日

GeoHex拡張のまえにおさらい

GeoHexのどこかを拡張する話があるのですが、
正直中身や周辺の理屈を理解しているわけではないので
現状を考えてみました。

GeoHexのコードと呼んでいる文字列、"quhO0cp" などは、
レベル(=Hexのサイズ)文字列に続けて、
赤道を軸とした斜交座標系 [wikipedia] の交点を示すXY座標を
60進数に変換した値を表しています。

六角形はこの交点を中心に平面充填していきます。
(とりあえず地球の球面上での境界条件を無視して進めます)

図はフリーハンドです。すみません。。。



一つ大きなレベルでは六角形は一つ小さくなり、
XYの座標軸はもとのレベルのXY軸の間に入ります。





このとき、同じXY座標をもつHexはレベルが一つあがると
XとYの値に2をかけた物になります。
例えば、
level 16で 37502/-13386 のHexと同じXY座標の
level 17のHexは75004/-26772となります。
75004 = 37502*2、
-13386 = -26772
です。


さて、斜交座標と、レベルとは別に、
隣接Hexについて考えてみます。

通常の直交座標(普通のXY軸)では




こうなるもので、考えるまでもないのですが
斜交座標のHexでは次のようになります。





この、隣接するHexの数値は相対的に固定であり、
どこのHexを取り出しても同じことが言えます。

つまり、XY座標がわかると、
* 同じXYの交点を中心に持つそれ以上のLevelのHexのXY座標
が分かり、さらに
* 自分の周辺のHexのXY座標
* 同じ交点を中心に持つHexのXY座標
も簡単な加減算で求めることができます。
さらに、
* 小さなレベルと同じ交点を共有する場合そのXY座標
もわかります。

個数を数えてみると、
レベル差1では中心+周辺6つのHexで合計7つ、
レベル差2ではそのさらに周辺12で合計19のHexについて
簡単な計算でXY座標を求めることができます。
これはつまり、小さなレベル(大きなHex)とXY座標を共有しているHexでは
大きなHexはそのまま
それよりも大きなレベル(小さなHex)の複数のHexのインデックスになっており、
1つのインデックスで19個のHexを表すとは、
あるレベルでのXYに対して、
それと同じ交点を座標に持つ二つ小さなレベル(大きなHex)が
GeoHex的に存在していなくても
ある物とするコード、ではないかと思ったのでした。




緑が現状のGeoHexでは存在していないHex(インデックス?)

0 件のコメント:

コメントを投稿