有人可以帮我解决这个问题吗?如何找到图中所示的角度?我想我需要找到两个矢量之间的角度,但我几乎不是很糟糕。 http://i.stack.imgur.com/W0RKh.png
答案 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.为实现此目的,请将其坐标除以其长度:
float d = 1 / sqrt(X * X + Y * Y + Z * Z);
normalizedX = X * d;
normalizedY = Y * d;
normalizedZ = Z * d;
注意:长度是反转的,然后相乘而不是分割,以提高性能。
在对步骤1中的两个向量进行标准化后,您需要执行点积:
float angle = acos(x1 * x2 + y1 * y2 + z1 * z2);
结果是两个矢量之间角度的余弦。在acos
之后,你有了自己的角度。