Unity である二点の距離を求めるには以下のようにとても便利なメソッドが用意されています。
static float Vector2.Distance(Vector2 a, Vector2 b);
static float Vector3.Distance(Vector3 a, Vector3 b);
もしくは以下のように magnitude を使用するのも良いです。
(pos1 - pos2).magnitude
どちらも対象の座標を2つ入れるだけです。簡単ですね。
どういった計算をしているのか
中学校レベルの数学なんですけどだいぶ頭から抜けているようで復習した。
ピタゴラスの定理を使って求めると良いようです。
平面幾何学において直角三角形の斜辺の長さを c、他の2辺の長さを a, b とすると、
a^2 + b^2 = c^2
が成り立つという定理である。
なので二点間(A,B)の距離を求めるには、(ax - bx)^2 + (ay - by)^2 == AB^2 という方程式を解く必要があります。3次元でも計算式が長くなるだけで基本は同じですね。
コードを書いて確認してみる。
public class TestDistance : MonoBehaviour {
void Start () {
Vector2 pos1 = new Vector2(10.0f, 24.0f);
Vector2 pos2 = new Vector2(3.0f, 10.0f);
Debug.Log (Vector2.Distance(pos1, pos2));
Debug.Log ((pos1 - pos2).magnitude);
Debug.Log (Mathf.Sqrt(Mathf.Pow(pos1.x - pos2.x, 2) + Mathf.Pow (pos1.y - pos2.y, 2)));
}
}
計算結果はどれも 15.65248 となりました。ばっちしですね。
コメント