ソースを上げるスレッド
■ このスレッドは過去ログ倉庫に格納されています
005453
02/01/18 18:17ID:???static uint8 *angle_t;
#define PRS 256
/* atanテーブルを作るらしい */
int angle_init(void) {
angle_t = malloc(sizeof(uint8) * (PRS * 2 + 1));
if (angle_t == NULL) return -1;
angle_t += PRS;
for (int i = -PRS; i <= PRS; i++) {
double a = atan2(i, PRS);
if (a > 0) a += PI2 / 256 / 2;
else a -= PI2 / 256 / 2;
angle_t[i] = a * 256 / P12;
}
return 0;
}
/* 0〜255で角度を返すらしい */
uint8 angle(int16 x, int16 y) {
if (x == 0 && y == 0)
return 0;
if (y < x) {
if (y > -x) {
return angle_t[(int32) y * 256 / x];
}
return angle_t[(int32) -x * 256 / y] + 192;
} else {
if (y > -x) {
return angle_t[(int32) -x * 256 / y] + 64;
}
return angle_t[(int32) y * 256 / x] + 128;
}
}
■ このスレッドは過去ログ倉庫に格納されています