C++ C++;计算两个三维矢量之间的角度(0到360)

C++ C++;计算两个三维矢量之间的角度(0到360),c++,math,3d,trigonometry,angle,C++,Math,3d,Trigonometry,Angle,假设我有两个3D向量 Vec3 v1, v2; v1.x = 203; v1.y = 355; v1.z = 922; v2.x = 6; v2.y = 13; v2.z = 198; 如何计算v1和v2之间的角度?也就是说,最终答案将在0到360 我试过了 Vec3 angle = v1 - v2; 还有一些其他的东西,但我似乎无法让它正常工作。您需要使用,一旦使用,您就可以按照。 例如: #包括 浮点点(Vec3 a,Vec3 b)//计算a和b的点积 { 返回a.x*b.x+a.y

假设我有两个3D向量

Vec3 v1, v2;

v1.x = 203;
v1.y = 355;
v1.z = 922;

v2.x = 6;
v2.y = 13;
v2.z = 198;
如何计算
v1
v2
之间的角度?也就是说,最终答案将在
0
360

我试过了

Vec3 angle = v1 - v2;
还有一些其他的东西,但我似乎无法让它正常工作。

您需要使用,一旦使用,您就可以按照。 例如:

#包括
浮点点(Vec3 a,Vec3 b)//计算a和b的点积
{
返回a.x*b.x+a.y*b.y+a.z*b.z;
}
float mag(Vec3 a)//计算a的大小
{
返回std::sqrt(a.x*a.x+a.y*a.y+a.z*a.z);
}
int main()
{
vec3v1,v2;
v1.x=203;
v1.y=355;
v1.z=922;
v2.x=6;
v2.y=13;
v2.z=198;
浮动角度=标准::acos(点(v1,v2)/(mag(v1)*mag(v2));
}

我的问题没有得到回答,你需要做的是找出C++的数学函数。我似乎记得有一个
math.h
头文件。你不确定计算角度的数学,还是不确定如何将数学转换为代码?你最终是如何解决的?我很感兴趣,因为我也有同样的问题。@mireazma你认为会发生什么?我不理解你的问题。在阅读你的解决方案后,我希望它返回一个0到180度之间的角度。但在阅读之前,我希望你的答案返回0到360之间的角度。正确的期望是什么?@mireazma向量没有固定的方向,它是相对于向量的,因此你不能有大于180度的角度。你总是会得到最小的角度,30和330是一样的。请记住,点积可以返回两个相对的向量中的任意一个,这取决于定义的方向为正。如果你使用一个平面,并且说两个向量都位于这个平面上,你可以使用这个平面法线作为你的恒定正方向,这将得到360度的结果。你只需要找到那个平面的行列式。谢谢你提供的信息。我想知道是否有可能(希望)首先使用叉积并跟踪向量的顺序。如果不是的话,我认为使用四元数理论上是可能的,只有在2个3D向量的情况下。
#include <cmath>

float dot(Vec3 a, Vec3 b)  //calculates dot product of a and b
{
    return a.x * b.x + a.y * b.y + a.z * b.z;
}

float mag(Vec3 a)  //calculates magnitude of a
{
    return std::sqrt(a.x * a.x + a.y * a.y + a.z * a.z);
}

int main()
{
    Vec3 v1, v2;

    v1.x = 203;
    v1.y = 355;
    v1.z = 922;

    v2.x = 6;
    v2.y = 13;
    v2.z = 198;

    float angle = std::acos(dot(v1,v2)/(mag(v1)*mag(v2)));
}