2016-09-07 9 views
2

このコードの背後にある数学を理解する助けが必要です。返された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)); 
} 

答えて

4

これは単位ベクトルのspherical coordinatesphitheta算出されます。

最初の成分(phi)は、ベクトルとz軸の間の角度になります。第2の成分(theta)は、xy平面上の角度になります。

これを解決すれば、関数内の計算が得られます。 2 Piyに追加すると、角度が02 Piの間にあることが保証されます。

+0

cos(theta)* sin(phi)= acos(z_value)とsin(theta)* sin(phi)= atan2(yvalue、xvalue)はどのように説明できますか? – BabaMara

+0

これは 'cos(phi)= z => phi = acos(z)'です。 'y'と' x'を分割すると、 'y/x =sinθ/cosθ= tan(theta)'が得られます。したがって、 'theta = atan(theta)'。あなたはまた、90°より大きな角度を得るために 'atan2'を使います。 –

+0

愚かな質問を申し訳ありませんが、 "=>"となりますか? – BabaMara