向量夹角计算

Posted by 蔡华的博客 on November 12, 2016

向量夹角

// 基于点积计算,
// a.b = ||a|| * ||b|| * sin(θ) 
// => θ = arccos(a·b / (||a|| * ||b||))
// => θ = arccos(a·b) //当a和b按照单位向量算时
float angle = Mathf.Acos(Vector3.Dot(a.normalized, b.normalized)) * Mathf.Rad2Deg;

// 基于叉积计算,
// ||a × b|| = ||a|| ||b|| sinθ             
// => θ = arcsin(||a × b|| / (||a|| * ||b||))
// => θ = arcsin(||a × b||) //当a和b按照单位向量算时
// 下面公式中有个Distance的计算是因为||a × b||是有长度的
angle = Mathf.Asin(Vector3.Distance(Vector3.zero, Vector3.Cross(a.normalized, b.normalized))) * Mathf.Rad2Deg;

// 最简单计算方式
Vector3.Angle(a, b)