[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 04/02 19:52 / Filesize : 219 KB / Number-of Response : 852
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

CLDC+MIDP+携帯電話用Javaスレッド part 8



629 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:47:13 ]
上の方でatan2が無いって困ってる人(俺も困った)がいたんでコード書いてみた
//tanを格納しているテーブル。配列のサイズを変えれば解像度が変わる
private static double[] tanTanble = new double[360];
static{
for (int i = 0; i < tanTanble.length; i++){
//tanテーブルの初期化(範囲は90度)
double tan = Math.tan(((0.5f / tanTanble.length) * i) * Math.PI);
tanTanble[i] = tan;
}}
public static double atan2(double x, double y){
double absX = Math.abs(x);//90度で計算するので絶対値に変換
double absY = Math.abs(y);
int angle = tanTanble.length;//角度
if (absX == 0)angle = tanTanble.length;//90度の場合
else if (absY == 0)angle = 0;//0度の場合
else{
double tan = (double) (absY / absX);//タンジェントを求める
for (int i = 0; i < tanTanble.length - 1; i++){
if (tan >= tanTanble[i] && tan <= tanTanble[i + 1]){//角度テーブルの指定範囲内に収まっていたら
angle = i;//角度決定
break;}}}
if (y >= 0 && x >= 0)angle += 0;//0~90//座標変換
else if (y >= 0 && x <= 0)angle = (tanTanble.length - angle) + (tanTanble.length * 1);//90~180
else if (y <= 0 && x <= 0)angle += (tanTanble.length * 2);//180^270
else if (y <= 0 && x >= 0)angle = (tanTanble.length - angle) + (tanTanble.length * 3);//270~360
double result;//ラジアンに変換
result = (double) (angle) / (double) (tanTanble.length * 4);
result = result * (2 * Math.PI);
return result;}
疑似atanだから、多分本物のatanよりも早いよ。精度は悪いけど。






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<219KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef