arc tangentテーブルを使ってarc tangentを求める
private final int tmax = 16; private final int n = 8; //これを使用するのは、atan_tableが作成されていることが条件 public int atan(int x, int y){ if(x==0 && y==0) throw new RuntimeException(" 原点から原点のarc tangentを求めようとした"); if(y<0) return atan0(-x,-y)+(1<<(tmax-1)); return atan0(x,y); } //この辺は内部的に使用する private int atan0(int x, int y){ if(x<0) return atan1(y,-x)+(1<<(tmax-2)); return atan1(x,y); } private int atan1(int x, int y){ if(x==y) return 1<<(tmax-3); if(y>x) return (1<<(tmax-2))-atan2(y,x); return atan2(x,y); } private int atan2(int x, int y){ if(x==0) return 0; int r = (int)(((long)y<<n)/x); return atanTable[r]; }
やね本2(ISBN:4798006033)を参考に(というかコピペ)作りました。
これでどんなシューティングも怖くないぞ〜(嘘