ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

目的の角度へ回転する

たとえば、誘導弾のように、ある角度を目的の角度へと近づける方法。
現在の角度と目標の角度の差を求めて、近づく方向へ角度を加えていけばよい。このとき注意するのは差が180度よりあった場合には、遠回りの回転をしないように180度以下に丸めること。

float fNowDir;  // 現在の角度
float fTargetDir;  // 目標の角度
float fRotSpeed;  // 回転速度

float fDiff = fNowDir - fTargetDir;

if ( fDiff > PI  ) fNowDir -= PI*2.0f;
if ( fDiff < -PI ) fNowDir += PI*2.0f; 

fDiff = fNowDir - fTargetDir;
if ( fDiff < 0.0f ) fNowDir += fRotSpeed;
if ( fDiff > 0.0f ) fNowDir -= fRotSpeed;