ゲームを作っていると2点間の距離を求めたい時が多く出てきます。
例えばプレイヤーと敵の距離を測りたいとき。
ゴールまでの距離を測りたいとき。
そういった時に距離を測るには三角関数を使えば簡単に距離を出せます。
この記事では三角関数を使って距離を算出する方法を解説します。
三角関数
三角関数とは三角形の角度と辺の長さの関係を解く関数の総称です。
中学生の時に習った下記の図と式を思い出してみてください。
- sin θ = b / a
- cos θ = c / a
- tan θ = b / c
- a² = b² + c²
- sin² θ + cos² θ = 1
よく出てくる計算式はこんな感じです。
この中の計算式を使えば簡単に2点間の距離を計算できてしまいます。
2点間の距離の計算
先ず下記の図のような2点があるとします。
A(1, 1)、B(2, 4)の2点があります。
この2点の距離を計算してみましょう。
先ずこの2点を三角関数に当てはまる形にしなければいけません。
この座標から分かるのはX, Yの軸毎の距離です。
それではX、Yの軸を別々に考えてみましょう。
なんとX軸が1、Y軸が3の直角三角形が出来ました!
これで横と縦が分かれば斜辺を出す計算式を当てはめれば直線の距離が出せそうですね。
では底辺と高さから斜辺を求める計算式は先ほどのどれでしょうか?
先ほどの図で底辺はc、高さはbからaを求めるので、
a² = b² + c²
この計算が当てはまります。
この式にそれぞれ数値を当てはめて解いていきます。
- a² = 1² + 3²
- a² = 1 + 9
- a² = 10
- a = √10
となり答えは√10となります。
つまり距離を計算したいときは2点間の軸ごとの差を出して、それぞれを2乗して足したのちに平方根( √ )を出せばいいということです。
a = √(a² + b²)
これは3次元でも同じです。
X, Y, Zの差を出したのちにそれぞれ2乗して足したもの結果の平方根( √ )で答えが出ます。
C言語でプログラム的に書くならこんな感じですね。
// 点A float x1 = 1, x2 = 1; // 点B float x2 = 2, y2 = 4; // 2点間のX軸とY軸の距離 float distX = x2 - x1; float distY = y2 - y1; // 2点間の距離 float dist = sqrtf(distX * distX + distY * distY);
これで2点間の距離が出ました。
やってみれば意外と簡単ですよね!
最初は忘れることもあるかもしれませんが何度も使うのでプログラムをしていればすぐに覚えられますよ!