arc tangentテーブルの作成
コサインテーブルの作成は出来ているものとして*1、
private final int tmax = 16; private final int n = 8; void makeAtanTable(){ int cn = getCosTableSize(); //2^cnのコサインテーブル int atan_table = new int[1<<n]; for(int i=1;i<(1<<(tmax-3));i++){ int s = i>>(tmax-cn); atan_table[(sin(s)<<n)/cos(s)] = i; } }
イメージ的にはこんな感じかな……。
コサインテーブルが十分に大きくないか、nが大きすぎる場合は、テーブルに穴が空く可能性があるので、その場合は、前の値で埋めるか、適当に計算で求めるべきだろう。
//空いているところは前の値で埋める int num=1; for(int i=1;i<256;i++){ if(atan_table[i] == 0){ atan_table[i] = atan_table[num]; }else{ num = i; } }
makeAtanTable()の最後にこんな感じの処理を入れたらいいのかな。
ちなみに、Javaではint配列をnewしたときに、全て0で初期化されることが保証されていたと思うので、わざわざ0を代入する処理は入れてないです。
というか、もっと数学的に求めろよ自分(;つД`)