まず、私は現在C++とDXライブラリでシューティングゲームの基礎を勉強しています。
そんな中、勉強がてらキャラクターの移動制御にsin,cosを使ってみようと考え以下のプログラムを組んでみました。
// キーフラグ
keyFlag = 0;
if(CKey::KeyState(KEY_INPUT_LEFT) != 0) {keyFlag += 1;} // 左
if(CKey::KeyState(KEY_INPUT_RIGHT) != 0){keyFlag += 10;} // 右
if(CKey::KeyState(KEY_INPUT_UP) != 0) {keyFlag += 100;} // 上
if(CKey::KeyState(KEY_INPUT_DOWN) != 0) {keyFlag += 1000;} // 下
switch(keyFlag)
{
case 1: keyAng = (180 * PI / 180); break; // 左
case 10: keyAng = ( 0 * PI / 180); break; // 右
case 100: keyAng = (270 * PI / 180); break; // 上
case 1000: keyAng = ( 90 * PI / 180); break; // 下
case 101: keyAng = (235 * PI / 180); break; // 左上
case 1001: keyAng = (135 * PI / 180); break; // 左下
case 110: keyAng = (315 * PI / 180); break; // 右上
case 1010: keyAng = ( 45 * PI / 180); break; // 右下
default: keyFlag = 999; break; // 例外
}
if(keyFlag != 999)
{
x += cos(keyAng) * speed;
y += sin(keyAng) * speed;
}
数学をまともに勉強してこなかったせいで、sin cosはおろか角度全般の知識が抜けているため、「何でPI使うの?」「しかも180で割るとか・・・」という状態です。
そこで、
1.どうしてこの計算で正しく動くのか
2.ついでにプログラミングに役立つ数学を教えてくれるサイト
を教えていだたきたいです。