サイン、コサイン、タンジェント
#直角三角形の場合のはなし
直角以外の角度から長さの比率を求めることが出来る。
sinθ = 対辺 / 斜辺
→対辺が求まる。= Y座標にあたる。
cosθ = 隣辺 / 斜辺
→隣辺が求まる。= X座標にあたる。
tanθ = 対辺 / 隣辺
アークサイン、アークコサイン、アークタンジェント
サイン、コサイン、タンジェントの値(つまり長さの比率)から、角度を求めることが出来る。
libgdxではアークタンジェントを求めてくれる関数↓
比率ではなく、長さそのものがパラメータになっている。
float angle = MathUtils.atan2( screenY - 200, screenX -200 );
radian(ラジアン)とDegree(角度)
radian(ラジアン)はPIを使って表した角度。
90度 = PI / 2
180度 = PI
パラメータや戻り値になっている角度がradian(ラジアン)なのかDegree(角度)なのかは、わかっておかないといけない。
上に書いたMathUtils#atan2
の戻りは、radian(ラジアン)。
それに対して、とく回転で使うActor#setRotation
に渡すパラメータはDegree(角度)なので、ラジアンからDegree(角度)に変換する必要がある。
radian * MathUtils.radDeg;
上で変換出来る。逆にデジ→ラジの変換係数もMathUtils
にある。
ベクトル
数学的には向きと力のこと。ゲームプログラミングだと単純に座標(X, Y)とかで使われる。
libGDXではcom.badlogic.gdx.math.Vector2
,com.badlogic.gdx.math.Vector3
のクラスがこれにあたる。
ピタゴラスの定理
h2 = a2 + b2 h2 のルート が斜辺の長さ
ピタゴラスの定理を使って、斜辺の長さがわかる。libgdxだとVector2#len
がこれに相当する。
2点A,Bの距離を求めたい場合は、以下のようにすればよい。
AのVector.sub(BのVector) = AB差分Vector 2点の距離 = AB差分Vector#len()
上記ピタゴラスの定理では距離が求まるが、正確な距離が知りたいのではない場合(2つの距離を比べてどちらが長いか、だけを知るときなど)は ルートの演算をする前の2乗したそのままの値で比較すればいい。
ルートの処理は地味に思いので、それをしないでいいところではしないほうが処理が軽い。
libgdxではVector2#len2
がこれにあたる。
単位ベクトル
上記ピタゴラスの定理では、2点の差の距離と向きがわかるが、
自分で速さを調整する時などのために、向きだけの情報がほしかったりする。
その為、単位ベクトルに変換する。この変換することを正規化する と言ったりもする。
libgdxではVector2#nor
がこの正規化する関数にあたる。
補完
点AからBへ移動するのに、少しずつ移動する、というようなのを補完という。
移動だけの話じゃなくて、赤から青にちょっとずつ変えたりとか。そういうのにも使える。
libgdxのActions#moveByとかは移動差分と時間を指定しているので、単純に距離を時間でわってちょっとずつ動かしたりしてる。そういうののことをいう。