山东淄博网站建设的公司,微信小程序怎么做店铺免费,seo霸屏软件,微信开发者平台怎么注销两向量的夹角
2017年06月20日 17:38:11 csxiaoshui 阅读数#xff1a;36764
怎么计算两个向量间的夹角呢#xff1f;
这里主要分两种情况#xff0c;对于二维向量和三维向量来分别讨论。
1. 二维向量
二维向量的情况相对简单#xff0c;根据向量间的点乘关系
v1⋅v2|…两向量的夹角
2017年06月20日 17:38:11 csxiaoshui 阅读数36764
怎么计算两个向量间的夹角呢
这里主要分两种情况对于二维向量和三维向量来分别讨论。
1. 二维向量
二维向量的情况相对简单根据向量间的点乘关系
v1⋅v2||v1||||v2||cosθ 可以得到
θacos(v1⋅v2/||v1||||v2||) 如果调用C/C数学库函数acos计算得到的结果的取值范围在 [0,π]。 这里得到的夹角并不在0到360度之间或者-180到180度也就是说得到的结果并不能告诉我们v1
在v2前面或者v1在v2
后面考虑到atan2函数可以用来计算出角度准确处于哪一个象限可以用atan2来计算夹角。 计算从v2到v1的夹角公式
θatan2(v2.y,v2.x)−atan2(v1.y,v1.x) 需要注意的是atan2的取值范围是[−π,π]
在进行相减之后得到的夹角是在[−2π,2π]因此当得到的结果大于π时对结果减去2π当结果小于−π时对结果加上2π 2. 三维向量
2.1 使用旋转轴和旋转角的方式
旋转角可以使用上面讨论的方式得到
θacos(v1⋅v2/||v1||||v2||) 旋转轴是两个向量的叉乘向量长度是||v1||||v2||sin(θ) 需要注意的是在acos取值在0度和180度这两个特殊值的时候要注意一下当两个向量夹角是0度或者180度的时候它们是平行的关系同向或者反向当夹角是0度时旋转轴可以是任意轴因为根本就没有旋转。当夹角是180度的时候旋转轴只要和向量呈90度夹角即可可以有无穷多个可能的选择轴。 2.2 使用四元数的方式
使用四元数来旋转一个向量使用下面的方式 p2 q * p1 * conj(q) 其中 p2 是旋转之后的向量 p1是旋转之前的向量 q是用来旋转的四元数 在这里知道p2和p1用来求解四元数还是相当麻烦的。因此一个比较好的思路仍然是使用上面旋转轴和旋转角的方式不过将结论转换成四元数罢了。 关于转换的方式可以参考我写的另外一篇文章《旋转变换三四元数》
参考文献 Maths - Angle between vectorsMaths - Trigonometry - Inverse trig functionsMaths - Issues with Relative Angles