首先要了解一些线性代数的知识,向量积和数量积;atan2f是math库内的函数,而cross求的是向量积的模,dot求的是数量积。
可以通过atan2f()函数求两个向量的夹角,代码如下:
float angle = atan2f(a2.cross(b2), a2.dot(b2));
//这个求的是向量积,二维坐标下也就是一个二阶行列式的计算
inline float cross(const Vec2& other) const {
return x*other.y - y*other.x;
}
//这个求的是数量积
inline float Vec2::dot(const Vec2& v) const
{
return (x * v.x + y * v.y);
}
然后,我们要知道下面两个公式:
而通过上述的公式可知: arctan(tan⊙)=⊙,而向量积的模除以数量积的模等于tan⊙,经过这样一换算,很简单的就能得出这两个向量之间的角度。
参考资料:https://blog.csdn.net/m0_37316917/article/details/77200577?utm_source=blogxgwz3