2D 空間の 2 点の角度を計算しようとしています。以下で動作します。
double angle;
x = player->x - x;
z = player->z - y;
angle = atan2 (x, y);
angle *= (180.0 / M_PI);
if(angle < 0) angle += 360;
if(angle >= 360) angle -= 360;
return angle;
ただし、より良い結果を得るためにテーブルを使用したい:
x = player->x - x;
z = player->y - y;
return atanTable[x+32][y+32];
その中で:
int xp = -32;
int yp = -32;
for (int x = 0; x < 64; x++, xp++)
for (int y = 0; y < 64; y++, yp++){
double angle;
angle = atan2 (xp, yp);
angle *= (180.0 / M_PI);
if(angle < 0) angle += 360;
if(angle >= 360) angle -= 360;
atanTable[x][y] = angle;
}
角度は、x と y の値が -32 ~ 32 の場合にのみ計算されます。
ただし、テーブルは適切に作成されていません。0 から 360 度の範囲を取得する必要がありますが、値は約 359 と 0 しか取得できません。
どういうわけかatan2を誤用していますか?