C++ 欧拉角的计算

C++ 欧拉角的计算,c++,glm-math,C++,Glm Math,我需要帮助理解这段代码背后的数学原理。返回的vec2的x分量和返回的vec2的y分量。有人能给我解释一下它们代表什么吗。我只知道这个函数确定向量在球坐标中的位置 glm::vec2 calcEulerAngles(const glm::vec3& vec) { glm::vec3 v = glm::normalize(vec); glm::vec2 result(acos(v.z), atan2(v.y, v.x)); while (result.y < 0.0)

我需要帮助理解这段代码背后的数学原理。返回的vec2的x分量和返回的vec2的y分量。有人能给我解释一下它们代表什么吗。我只知道这个函数确定向量在球坐标中的位置

glm::vec2 calcEulerAngles(const glm::vec3& vec)
{
  glm::vec3 v = glm::normalize(vec);
  glm::vec2 result(acos(v.z), atan2(v.y, v.x));
  while (result.y < 0.0)
    result.y += TwoPi;

  return glm::vec2(glm::degrees(result.x), glm::degrees(result.y));
}
glm::vec2计算规则(const glm::vec3&vec)
{
glm::vec3 v=glm::规格化(vec);
glm::vec2结果(acos(v.z),atan2(v.y,v.x));
而(结果y<0.0)
结果:y+=TwoPi;
返回glm::vec2(glm::degrees(result.x),glm::degrees(result.y));
}
计算单位向量的φ和θ

第一个分量(
phi
)是矢量和z轴之间的角度。第二个分量(
theta
)是xy平面上的角度。它假设向量可以表示为:

x = cos theta sin phi
y = sin theta sin phi
z =           cos phi

如果你解决了这个问题,你可以在你的函数中得到计算结果。将
2pi
添加到
y
可以确保角度在
0
2pi
之间,你能解释一下cos(θ)*sin(phi)=acos(z_值)和sin(θ)*sin phi=atan2(yvalue,xvalue)是怎样的吗?
cos(phi)=z=>phi acos(z)
。如果将
y
x
分开,则得到
y/x=sinθ/cosθ=tan(θ)
。因此,
theta=atan(theta)
。使用
atan2
也可以获得大于90°的角度。“事实上
cos(phi)=z
意味着
phi=acos(z)
”。刚刚注意到一个错误:前面的注释应该是
theta=atan(y/x)