2つのベクトルのなす角を得る
内積(Dot Product)は、「vAとvBの内積 = |vA| * |vB| * cosθ」で求まる。
vAとvBのなす角を得たい場合、これが使える。
「vAとvBの内積 = |vA| * |vB| * cosθ」より、
vA, vBはともに単位ベクトルで1なので、
cosθ = Ax * Bx + Ay * By + Az * Bz
= 1 * 0.866 + 0 * 0.5 + 0 * 0
≒ 0.866
y = cosx ⇔ acosy = x より、
acos(0.866) ≒ 30.002
ゆえ、θ = 30°となる。 (0°≦θ≦180°)
using System; using System.Windows.Media.Media3D; namespace Calc { public static class Logic { /// <summary> /// 2つのベクトルのなす角を得る /// </summary> /// <param name="v1"></param> /// <param name="v2"></param> /// <returns>2つのベクトルのなす角(radian)</returns> static private double GetAngle(Vector3D v1, Vector3D v2) { v1.Normalize(); v2.Normalize(); double cos = Vector3D.DotProduct(v1, v2); double rad = Math.Acos(cos); return rad; } } }