2014-05-05

HEX間の距離の求め方

 HEXタイプのSLGを作ろうとすれば、当然ある二つのHEXが何HEX離れているのかを知りたくなる事があります。ところが、これについてはっきりと解説してあるサイトが見当たらなかったのです。仕方がないのでうんうん唸りながらどうにかこうにか、計算式を発見しました。
 ただし、いまのところエラーは出ていないものの、この計算式が正しい証明はありません。経験上うまくいっているだけというのをご了承ください。

 まず、私が示す計算式は、いくつかの前提条件の下でしか通用しない事をお断りしておきます。

UO0052.jpg

 この画像のように、HEXの並びが左上に凸であり、HEXの向きが上下に凸である事です。これとは違う条件の場合は、少しずつ計算式を調整する事になると思います。

 ではまず下の画像をご覧ください。

UO0051.png

 中心の青いHEXを基準座標とします。その場合、水色のラインによって比較対象HEXを6エリアに分割できます。

 まず、水色のラインのうち左右に伸びているライン上のHEXとの距離の求め方ですが、これは簡単です。基準HEXと対象HEXのX座標の差が、そのままHEX間の距離になります。
 また、斜めに引かれている水色のライン上、および第2、第5エリアの対象HEXとの距離の求め方も簡単です。これはY座標の差が距離になります。
 それ以外のHEXとの距離の求め方はちょっとわかりづらいですが、次のようになってます。

第1、第6エリア
 基準HEXのY座標が偶数のとき 基準HEXと対象HEXのX座標の差 + Y座標の差/2(切り上げ)
 基準HEXのY座標が奇数のとき 基準HEXと対象HEXのX座標の差 + Y座標の差/2(切り捨て)

第3、第4エリア
 基準HEXのY座標が偶数のとき 基準HEXと対象HEXのX座標の差 + Y座標の差/2(切り捨て)
 基準HEXのY座標が奇数のとき 基準HEXと対象HEXのX座標の差 + Y座標の差/2(切り上げ)

(注:一番左上の座標を(0,0)とします。つまり、一番上のHEXのY座標は偶数です)

 実際には水色のライン上も6エリアのどこかに分類されますので、「ライン上だったら」という条件分岐は必要ありません。

 これはたぶん間違っていないはずですが、もし間違うケースが存在しましたらお知らせいただけると助かります。すでに完成してしまっているゲームを修正しなければなりません。
 手作業で、地道に一つ一つ規則性を見つけて行きました。途中で「よし分かった!」「やっぱり分かってなかったよ・・・」というのが何度あったか。
 みんなもうちょっと地味なHEXタイプのSLGつくろうよ。

コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

コメントの投稿


管理者にだけ表示を許可する

Copyright (C) 旅の雲. All rights reserved. Template by Underground