『skyrim』をプレイする暇がなくて困ってます・・・
性能の良いパソコンも欲しいなぁ
③座標からの変換
これもまたマルペケつくろーに載ってることですが
自分の理解のためにも書きます
さて、4分木空間分割が処理が軽いと言っても
空間を判別する時に時間をかけてしまっては意味がありません
そこで工夫した処理方法を考えてみます
今、したいこと、つまり理想は『縦のマスと横のマスが分かれば一発で空間レベル、位置がわかる』ということです
まず、親空間しか無いと仮定して話します
左上を原点として、
[0・0] ⇒ 0
[0・1] ⇒ 1
[1・0] ⇒ 2
[1・1] ⇒ 3
となります
ちょうどこんな感じ(めちゃくちゃわかりにくいのであのサイトを見てくださいm(_ _)m )
0・1 →X
0 0|1
・ ―――
1 2|3
↓
Y
では、『2』に注目してみます
2を2進数で表すと[10]になります
わかる人はもう分かっていると思いますが、この2進数、座標と同じですね!!( [Y、X]と並べたときです )
これはすなわち、2つずつに2進数を分けたとき、左がY座標、右がX座標を表しているといえます(発展していうと、X座標とY座標の数字がお互いに影響が無い、つまり独立しているということです!!!)
これが、ものすごい重要なんです
良く考えたな~って感じです
次に、親空間、子空間、孫空間があったとします
縦、横の長さは8でいいすかね
(さすがにさっきの文字の図はかく気になれません)
じゃあ『38』でもやってみましょう
38を2進数であらわすと[100110]になります
で、こんどは座標の2進数を見ていきましょう
38の座標は[2、5]なので
X軸、つまり2の2進数は[010]
Y軸、つまり5の2進数は[101]
となります
こ、この数字は・・・!!!
カンがいい人は気付いたかもしれません
この2進数を↓こんなかんじで組み合わせると・・・
X軸の2・・・ 0 1 0
Y軸の5・・・1 0 1
100110
あああああぁぁぁっぁぁっぁあ!!!!
[100110]、すなわち38が出てきました!!!
これは先ほど言った、『X座標とY座標の数字が独立している』ということが関係していて、N進数の特性を最大利用している気がします
この作業、細かくやればズバッと解決できます(この下、細かい作業なのでいらない人は飛ばしてください)
細かく、というのは親空間、子空間、孫空間をひとつひとつやっていくということです
親空間での2は0にあたり、5は1にあたります
子空間では2は1、5は0
孫空間では2は0、5は1です
気付きましたでしょうか
2の2進数は[010]でしたが、
1桁目が孫空間、2桁目が子空間、3桁目が親空間に対応しています!
なので、X軸とY軸の2進数列を素直に組み合わせるだけで、座標が指し示す数字、空間の位置がわかるということです!
ってなわけで、座標から位置がわかるようになりました
試しに[4、6]がどこを示しているか考えてみましょう
4・・・[100]
6・・・[110]
組み合わせると・・・
1 0 0
1 1 0
111000
[111000]を10進数に戻すと・・・『56』と出てきました
これは・・・あってますね!成功です
てなわけで座標から空間を出すのは分かったみたいです
長かった・・・