C++ 欧拉角的计算
我需要帮助理解这段代码背后的数学原理。返回的vec2的x分量和返回的vec2的y分量。有人能给我解释一下它们代表什么吗。我只知道这个函数确定向量在球坐标中的位置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)
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)
。