我们知道余弦定理 cos(α) = A·B/(|A|·|B|),反过来也可以求得A,B向量得夹角
α = arccos(A·B/(|A|·|B|))。
但是,由于余弦函数是一个0~Π之间的偶函数,当夹角大于Π时,计算得到的角度仍然为正值,不是正确的夹角,此时可以用以下方法:
向量Vector是一个Point1指向Point2向量,先计算出该向量的X分量与Y分量
double radian = 0;
double deltaX = Point2.X - Point1.X;//X分量
double deltaY = Point2.Y - Point1.Y;//Y分量
double length= Math.Sqrt(deltaX * deltaX + deltaY * deltaY);//该向量的长度
然后利用反三角函数计算夹角,此时需要注意角度的旋转方向
if(deltaY >0)
radian = Math.Acos((deltaX) / length);//计算与单位向量(1,0)的夹角
else
radian = -Math.Acos((deltaX) / length);//当角度超过180时则需要取反
但是这个方法很麻烦,还需要分条件判断,这时候注意到角度的正负与Y值相关,可以简化为
radian = (deltaY / Math.Abs(deltaY)) *Math.Acos((deltaX) / length);