ゲームプログラミングから見る数学 #3 ~三角関数・後編~

こんにちは。インターン生の小野です。

前回に引き続き、三角関数のお話です。
説明していなかった、タンジェントの性質について見ていきます。

まずはタンジェントの定義から。前回の図を持ってきます。

この図において、
tanθ = b / a = sinθ / cosθ
が成り立ちます。
タンジェントは、サインとコサインで表現することが出来ます。

さて、前回ではベクトルを2つに分け、それぞれ大きさは長い辺の、
右向き(x軸の方向)はcosθ倍
上向き(y軸の方向)はsinθ倍
で決まることが分かりました。
tanθ = (y方向の大きさ) / (x方向の大きさ)
なので、タンジェントとは「斜めの辺がどれくらい傾いているか」を表す値となります。

このタンジェントという値は、ゲームにおいてそのまま使われることもありますが、実はもっと使う場面が多いものが存在するのです。
それは『アークタンジェント(atanと略されます)』という値です。
タンジェントが最後の1つと書いたにも関わらず、新たな言葉が出てきました。
実はサイン、コサイン、タンジェントの他にも三角関数はあります。
(数学でもゲームでも使わないものが多く、少し複雑なので今回は扱いません)

ちょっとかっこいい響きのアークタンジェントですが、考え方は簡単です。
タンジェントは「角度から傾きを求める」関数でしたが、
アークタンジェントは「傾きから角度を求める」関数です。
上の図の例で言えば、
atan(b / a) = θ
ということになります。タンジェントの逆計算ですね。

では、具体的にどのような場面で使われているかというと、
シューティングゲームでよく見るホーミング弾(追跡弾)の動きです。

プレイヤーキャラクターへ向けて弾を動かしたいときに、
図の赤いベクトルを作りたい時を考えます。

このような直角三角形を考えると、プレイヤーキャラクターと弾の位置の差から
a, bの長さが分かります。
そこから、アークタンジェントを用いて
atan(b / a) = θ
のように角度を求めてあげれば、長い辺の長さも
c = a / cosθ
で分かるため、目的のベクトルを算出できます。

しかし、少し問題があります。
前回の最後にも書いた、時計回り・反時計回りの区別です。
これを逆にしてしまうと、進行方向も逆になってしますので、
注意するようにしてください。

今回はここまでです。
何に使うかわからなかった三角関数が、実はキャラクターを動かすのに使われている、ということを知ってもらえたら嬉しいです。
次回は、知らない方もいるであろう『行列』についてです。

興味を持たれた方はお気軽にお問い合わせください。

インターンシップへの申し込み・お問い合わせ先

インターンシップへの申し込み・お問い合わせ先
メールでのお問い合わせは、下記フォームに入力して送信してください。
ご氏名 (例)山田 太郎
メールアドレス 半角英数字:ご入力間違いのないようにご注意ください
メールアドレス(確認用) 半角英数字:ご入力間違いのないようにご注意ください
電話番号 (例)0354339211 ※ハイフン抜きで入力してください
題名
お問合わせ内容

アーカイブ

カテゴリー