无法找到2个向量之间的角度

时间:2014-12-18 16:13:50

标签: vector angle

有人可以帮我解决这个问题吗?如何找到图中所示的角度?我想我需要找到两个矢量之间的角度,但我几乎不是很糟糕。 http://i.stack.imgur.com/W0RKh.png

2 个答案:

答案 0 :(得分:0)

如果您使用C ++开发程序,那么要计算两个向量之间的角度,您可以使用atan2函数,它存在于许多编程语言中。

你需要调用atan2给它一个向量的两个组件,然后用这种方式进行计算:

计算第一个向量:atan2(v1_y, v1_x)
计算第二个向量:atan2(v2_y, v2_x)

注意: 如果atan2返回的值为负(因为atan2从范围(-pi; + pi)返回值),则需要为每个向量的结果添加2 * pi。

最后你减去矢量的值,你得到的是角度。角度将为正或负,取决于从哪一个减去atan2值。

答案 1 :(得分:0)

您需要对两个向量进行标准化,然后执行dot product

第1步:矢量标准化:

标准化向量的长度为1.为实现此目的,请将其坐标除以其长度:

float d = 1 / sqrt(X * X + Y * Y + Z * Z);
normalizedX = X * d;
normalizedY = Y * d;
normalizedZ = Z * d;

注意:长度是反转的,然后相乘而不是分割,以提高性能。

第2步:点积

在对步骤1中的两个向量进行标准化后,您需要执行点积:

float angle = acos(x1 * x2 + y1 * y2 + z1 * z2);

结果是两个矢量之间角度的余弦。在acos之后,你有了自己的角度。