Google Maps のコーディングをしていたのですが、仕様書の説明文が理解出来ない箇所があり、頭の中が沸騰。
いつもなら熟睡している時間なのに寝られない。
http://code.google.com/intl/ja/apis/maps/documentation/polylinealgorithm.html
同じ内容の英語のドキュメントを読んだけど意味は全く同じ。
リンク先にある
説明文と、処理の過程を示すビット配列の関係がわかりにくい。
1段目:10進数を2進数に変換し、4バイトで表現した
2段目:ビット演算のNOT?けど3バイト目が矛盾
3段目:もとの10進数がマイナスの値だから、2の補数にするために最終ビットに+1
なんだかすっきりしない記述です。
3段目の結果だけを見れば、10進数の値を2進数に変換しただけなのですが、じゃぁなぜこの3段分の記述があるのか?
ドキュメントをプリントアウトして、後輩に相談。
10分ぐらい論議したけど結論は出ず。
「使いこなしている人のソースコードを読もう」ということで、検索したらMark McClureさんのページに答えがありました。
ここのページにリンクしてあるJavaScriptを参考にしたところ。
3〜5の処理がわずか4行で記述されていました。
function conv(lat){
var num = lat<<1; //1ビット右へシフト
if ( lat < 0 ) { //マイナスの場合は
num = ~(num); //not値を取得
}
return num;
}
なんだ、簡単じゃん。
いつもなら熟睡している時間なのに寝られない。
http://code.google.com/intl/ja/apis/maps/documentation/polylinealgorithm.html
同じ内容の英語のドキュメントを読んだけど意味は全く同じ。
リンク先にある
3.この10進値を2進値に変換します。負の値は正負を逆転して、バイト境界までの空いた桁に値を挿入する必要があります。
00000001 00010010 10100001 11110001 (1段目)
11111110 11101101 10100001 00001110 (2段目)
11111110 11101101 01011110 00001111 (3段目)
説明文と、処理の過程を示すビット配列の関係がわかりにくい。
1段目:10進数を2進数に変換し、4バイトで表現した
2段目:ビット演算のNOT?けど3バイト目が矛盾
3段目:もとの10進数がマイナスの値だから、2の補数にするために最終ビットに+1
なんだかすっきりしない記述です。
3段目の結果だけを見れば、10進数の値を2進数に変換しただけなのですが、じゃぁなぜこの3段分の記述があるのか?
ドキュメントをプリントアウトして、後輩に相談。
10分ぐらい論議したけど結論は出ず。
「使いこなしている人のソースコードを読もう」ということで、検索したらMark McClureさんのページに答えがありました。
ここのページにリンクしてあるJavaScriptを参考にしたところ。
3〜5の処理がわずか4行で記述されていました。
function conv(lat){
var num = lat<<1; //1ビット右へシフト
if ( lat < 0 ) { //マイナスの場合は
num = ~(num); //not値を取得
}
return num;
}
なんだ、簡単じゃん。
