Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

ゲームアプリの数学輪読会 #1 「三角関数」

 

今回は、こちらゲームアプリの数学輪読会に参加

 

したかったんですがちょっと時間の都合が合わなかったのでもくもく会をします。

weeyble-game.connpass.com

 

まとめ中、後で記事を更新します!!!

大分遅れましたが更新しました。

 

 

 

 


第1章 三角関数

1.1 三角形

 三角形は3つの頂点からなり、頂点によって3つの辺が決まる。
3つの辺のうち、2つの辺からなる角を内角という。
内角の和は180で、三角形は常にどこかの平面上に存在する。

 

1.2 直角三角形

 三角関数で主に扱う三角形は、一般的な三角形よりさらに条件が狭まり、扱いやすいもの。
3つの頂点のうち、1つが直角(90度)をなすものを直角三角形という。
直角の向かい側にある斜めの辺を斜辺という。
他は、底にあるものを隣辺、残りの辺を対辺という。
 直角三角形の中で、3つの辺の長さと、斜辺と隣辺がなす内角の角度(シータ)との間に存在する関係を使って、
 例えば斜辺とシータが与えられたときに他の辺の長さを割り出すのが、三角関数の最も基本的な使い道である。

 

1.3 ピタゴラスの定理

 ピタゴラスの定理とは、斜辺の長さをh、隣辺の長さをa、対辺の長さをoとしたとき、以下の式が成り立つものをいう。
 h2 = a2 + o2


 定理とは、証明が既に行われた命題のこと。
プログラミング的にいうと、基本的なライブラリ関数やコンポーネントに相当する。

 

1.4 サイン、コサイン、タンジェント

 サイン(正弦)

sinΘ = 対辺/斜辺
 sinシータは内角がシータの時の斜辺と対辺の比率を表す。
つまり、斜辺の長さとシータの角度が分かっているときに、斜辺の長さにsinシータをかけると、対辺の長さが得られる。

 コサイン(余弦)

cosΘ = 隣辺/斜辺
 サインと違うのは、コサインは斜辺と隣辺を表している。
斜辺と内角Θがあれば、斜辺の長さにcosΘを掛け隣辺の長さを求めることができる。

 タンジェント(正接)

tanΘ = 対辺/隣辺
 タンジェントは隣辺と対辺の比になる。

 

1.5 三角関数の周期性

単位円

 三角関数は変化するパラメータΘに依存した関数だが、直角三角形で使うと不都合な点がある。
直角三角形だと、Θは0より大きく90より小さい角度される点だ。
そこで、直角三角形を含む円を使って三角関数を表現する手法をとる。

 単位円とは、半径の長さが1の円のこと。

f:id:Raspberly:20181011140602g:plain



図はこの円の上に直角三角形を置き、中心は原点o(0, 0)にしたもの。
こう表現することで、Θの角度が変動した場合も斜辺は常に1になるため、
サインコサインの定義を当てはめるとPの位置は座標は常に(cosΘ, sinΘ)となる。
この三角形にピタゴラスの定理を当てはめると、
(sinΘ)2 + (cosΘ)2 =1
という関係を導ける。この式はピタゴラスの三角恒等式と呼ばれる一連の関係を導き出すための基礎となる公式。

 

余弦定理

a2 = b2 + c2 -2bc cosΘ
 直角三角形に限らない一般的な三角形に成り立つ性質。
 ピタゴラスの定理はこれに当てはまる

 

 

周期性

 単位円を使うと、原点を軸に円の半径を回転させることで90度より大きな角度での三角関数の数位も表現できる。
 

ラジアン

 円に、実際の三角関数の数値を載せてみたのがこの図になる

f:id:Raspberly:20181011140608p:plain



90度に対応してπ/2、180度に対応してπという表記ある。
これはラジアンと呼ばれる形式で、数学やプログラミングの分野で角度を表すのに使われる。

 単位円上の点から、単位円の円弧上で長さ1の分だけ移動した点をPとする。
この時、半径と弧の長さが同じになっている状態になっている時の角度を1ラジアンとするのがラジアン形式の基本的な考え方。
(ラジアンで角度を表現するとき、1ラジアンを1とだけ書き、単位を省略することが一般的)

 

 

加法定理

f:id:Raspberly:20181011164926g:plain

 さらに、単位円上を見ていくと、。内角αの加法定理では、以下の公式が成り立つ。
sin(α ± β) = sinαcosβ±cosαsinβ
cos(α ± β) = cosαcosβ±sinαsinβ
加法定理をP'に当てはめると、元々の点P:cosα, sinαをβ回転した点P'の位置は以下のようになる。


(cosα cosβ - sinα sinβ, sinα cosβ + cosα sinβ)
この式は、座標の上の任意の点(x, y)に対する、原点中心の回転アルゴリズムとして使うことができる。
回転元の点Pの座標であるcosαをxに、sinαをyに置き換えてやるだけ。
(x, y)をβだけ回転した点の位置は以下の通りになる。
(x cosβ - y sinβ, x sinβ + y cosβ)

加法定理からは様々な公式が導きだせる(半角の公式など)

 

 

サイン波、コサイン波

  θのラジアンを横軸としたときのサインの値を縦軸とするグラフを作ってみる。
2πを1周期として、0 → 1 → 0 → -1 → 0と値の変動が繰り返し続いている。この周期を基本周期と呼ぶ。
一般的に、定数Pに対して ∫(x + P) = ∫(x)が成立する関数を周期関数と呼ぶ。

 サインについてはP = 2πである。つまり、
sin(x+2π) = sin(x)が成り立つ。

このグラフは緩やかな孤を描いた波の繰り返しになる。
この波の形をサイン波と呼ぶ。

f:id:Raspberly:20181011165035p:plain


 コサインの値を取ったグラフもサイン波と同じ形をしている。
ただしコサイン派はサイン派より元の周期の1/4分だけ早く波打っている

これらサイン波コサイン波は少し加工するだけで簡単にバリエーションを生み出すことができる。
例えば、パラメータxを1/2の量にすれば、もっと緩やかなカーブになり、2倍にすればより早く波打つ。

 

 

図などは他のサイトから引用しています。

Top - nagatabi-p ページ!

 

間違っている所などがあればコメントにお願いします!