質問: 1) { return -1; } //Graphic_Draw(); } WaitKey(); return 0; } ```
回答: ***1,プログラム上の角度0度は右で時計回りに角度が増えていく、でよろしいのでしょうか?*** 使用する座標系によります。数学での座標系なら、こんな感じでしょう。 ``` y↑ | | | | +----------→x O ``` この場合x軸の正の向き(あなたの言う「右」)を0°として反時計回りに角度が増えていきます。 ゲームでの座標系なら通常こうでしょう。 ``` O +----------→x | | | | y↓ ``` この場合2通りの考え方があります。 ### 数学座標用の式をそのまま使う y座標の上下がひっくり返っているので、 x軸の正の向きを0°として**時計**回りに角度が増えていきます。 ### 角度は数学と同じく反時計回りに増えていかないとなんか変な気がする 当然ながら、 x軸の正の向きを0°として**反時計**回りに角度が増えていきます。 そのため、使う**式の方でy座標を正負反転**させてやらないといけません。 あなたが示されたコードだとy座標の計算が`-=`になっているので、もともとこちらを意図して書かれたもののように思います。 ***2,特定の角度で玉が飛んでいくといったプログラムを作る際に sin(PI / 6)といった組み方をしていますが0.0174533(1度のラジアン) * 30 といった書き方は違うのでしょうか?*** πラジアン=180°と言うのはご存知でしょう。したがって1°=(π/180)ラジアン≒0.01745329251994...ラジアンと言うことになります。`0.0174533`はこの値を四捨五入したものということになるので、`0.0174533 * 30`だと少しばかり精度が低いと言うことになります。逆に言えば`PI`と同じ程度に十分な精度で`0.01745329251994...`を表す定数を用意してやれば、あとは好みの問題と言って良いでしょう。 (実際には、単精度で定数用意しても誤差が画面上に現れるほど大きくなることは滅多にないでしょうが。) ### 直接のご質問内容にはありませんが... 上記のような取り扱いをする場合、長さ`1`で角度`θ`の方向ベクトルは`(cos(θ), sin(θ))`(または`(cos(θ), -sin(θ))`)です。(x軸方向が`cos`でy軸方向が`sin`。)これを逆にすると、0°がどっち向きかも、角度が増えていく向きも変わってしまいますので注意してください。