CDW 境界線を表示する


2021年 8月 24日
 
 
 マップの作成はできたので、今度は国の境界線表示を試みる。
 
 

 
 

 まずベタに考えると、1つのマスにつき 6方向に対する枠線の情報を持つとなると、マップの大きさ × 6倍のデータを持ち、かつ表示毎事にそれだけの判定と表示をしなければいけなくなる。

 これではデータの量もさることながら、表示スピードは期待できない。

 次に 1マスにつき左上 3方向に対する枠線のデータを持つ方法を考えた。

 この方法だと表示が重なる部分を省ける。
 
 
 合わせて 1つのデータを 2進数の集まりとして考え、1つのデータで ON OFF のデータを複数持つように考えた。

 どういう事かと言うと、2進数だとケタ毎の数は 1、2、4、8、16、32となるので、例えば 1番目と 2番目が ONの場合はデータ数は 3となる。

 要するにビット演算で ON OFF情報を持つようにする。

 例えば 2番目と 4番目と 5番目が ONなら、2 + 8+ 16 = 26となる。

 これを ANDで判定する、例えば 4番目があるかどうか判定するには if data & 8 =1 となる、無い場合は 0になる。

 さて、この方法で 1マス 3方向の枠情報を持つやり方を考えたけど、これだとマップの外周表示に、それぞれ別の表示ルーチンを持たないといけない、あるいは最下段の下の段にマップより 1マス多いデータを用意しないといけない、めんどくさい。
 
 
 そんな感じで色々考えたけど、最終的に 1つのデータで 6方向の枠情報を持つ方法にした。

 閃いたのは、あらかじめ画像データで 6方向の枠線の全組み合わせを描いて置く事。

 組み合わせは 1 + 2 + 4 + 8 + 16 + 32で 64通りとなる。

 これは上から順に 2進数の表記にもなってる訳だ。

 この方が表示は高速になるはず。
 
 
 最初は手書きで描いてみたけど、流石に間違いも発生するので、プログラムで自動作成する事にした。
 
 
 基になる画像を用意して


 
 

 
 
 次のような画像になる

 *画像はワードプレスで .bmp画像が使え無いし、拡大して .jpgにしてます。
 
 
 こうすると実際に使う場合は、HEXの隣接を調べて枠線の 1、2、4、8、16、32をそのまま足し算すれば枠線のデータになる訳です。

 
 
 表示する時は、データをそのまま画像 No.にすれば良いです。

 
 

コメントを残す

メールアドレスが公開されることはありません。