ゲームプログラミングから見る数学 #2 ~三角関数・前編~
こんにちは。インターン生の小野です。
第2回のテーマは『三角関数』です。
サイン、コサイン、タンジェント。これだけ覚えてる方も多いと思います。
ではこれらはいったいどのように使われているのでしょうか。
ゲーム内で物を投げた時を想像してみましょう。
プレイヤーから斜め前へ向かって飛び出し、山なりに進んで地面に落下する…
そんな感じに動くと推測できます。
つまり、斜め上向きのベクトルですね。
この動きを表現するために、このままだと扱いにくいので、
第1回で書いた「1つのベクトルを2つのベクトルに分ける」ということをします。
今回の例では、重力が関係する上向きと、関係しない前向き(右向き)の2つに分けます。
斜め向きよりも縦横の向きのほうが分かりやすいからです。
現実世界でも道案内するときに右斜め前30度に○○m、とはあまり言いませんよね。
まっすぐ○○m行って、右に曲がって○○mということが多いのと同じです。
さて、2つに分けましたが困ったことがあります。
分けた後のベクトルがどれくらいの大きさなのかわからないのです。
ここで登場するのが、三角関数です。
まずは三角関数の性質を簡単に説明します。
3辺の長さがa, b, cで、図の位置の角度をθ(シータ)とします。
数学において、θは角度を表すことが多いです。
このような直角三角形において、
sinθ = b / c
cosθ = a / c
が成り立ちます。これを少し変形してみます。
a = c × cosθ
b = c × sinθ
つまり、一番長い辺と角度が分かれば、他の辺の長さもわかる、ということです。
サインとコサインの正体は「長い辺とそれ以外の辺の長さの比率を表したもの」ということになります。
これをふまえたうえで先ほどの図をご覧ください。
似たような形をしていますね。ということで三角関数の性質から、
前向きのベクトルは cosθ 倍
上向きのベクトルは sinθ 倍
の大きさを持つことが分かります。
これで扱いやすい形になりました。
よく高校数学の教科書で(x, y)のような形でベクトルが表現されていることがあると思います。
これは、x軸の方向(右向き)とy軸の方向(上向き)に分けて考えているから、なんですね。
最後に、ゲームプログラミング等で三角関数を使おうとしている人に1つ注意があります。
今回は、角度θを右の線を基準として反時計回りで計算しました。
ですが、言語によっては時計回りでとっている場合や、基準の位置が違う場合があります。
使用する際は基準の位置と回る向きをきちんと確認してから使ってください。
今回はここまでです。
長くなるので、タンジェントに関してはまた次回書こうと思います。
興味を持たれた方はお気軽にお問い合わせください。
インターンシップへの申し込み・お問い合わせ先
