首页 > 后端开发 > C++ > 如何直接计算两个向量之间的顺时针角度?

如何直接计算两个向量之间的顺时针角度?

Mary-Kate Olsen
发布: 2024-11-14 16:19:02
原创
330 人浏览过

How do you calculate clockwise angles between two vectors directly?

直接计算顺时针角度

计算两个向量之间的顺时针角度通常使用点积来解决,点积确定内角(0 -180度)。但是,如果您更喜欢直接方法,请考虑以下步骤:

2D 案例

就像点积测量角度的余弦一样,行列式提供角度的正弦值。顺时针角度可以计算为:

dot = x1*x2 + y1*y2  # Dot product between [x1, y1] and [x2, y2]
det = x1*y2 - y1*x2  # Determinant
angle = atan2(det, dot)  # atan2(y, x) or atan2(sin, cos)
登录后复制

角度的方向与坐标系对齐,正号表示顺时针角度。交换输入会改变方向,从而改变符号。

3D 案例

对于 3D 向量,这两个向量定义垂直于两者的旋转轴。由于该轴没有固定方向,因此无法唯一确定旋转角度的方向。常见的约定包括将轴定向以产生正角度。在这种情况下,归一化向量的点积就足够了:

dot = x1*x2 + y1*y2 + z1*z2  # Between [x1, y1, z1] and [x2, y2, z2]
lenSq1 = x1*x1 + y1*y1 + z1*z1
lenSq2 = x2*x2 + y2*y2 + z2*z2
angle = acos(dot/sqrt(lenSq1 * lenSq2))
登录后复制

3D 中的平面

如果向量位于具有已知法向量的平面内 n,它们的旋转轴位于n。在合并 n 的同时调整 2D 计算可提供顺时针角度:

dot = x1*x2 + y1*y2 + z1*z2
det = x1*y2*zn + x2*yn*z1 + xn*y1*z2 - z1*y2*xn - z2*yn*x1 - zn*y1*x2
angle = atan2(det, dot)
登录后复制

确保 n 对此计算进行归一化。

0-360 度范围

许多 atan2 实现的返回角度在 [-180°, 180°] 范围内。要获得 [0°, 360°] 范围内的正角度,请在任何负结果上加上 2π。

以上是如何直接计算两个向量之间的顺时针角度?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板