2016-09-07 2 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 축 사이의 각도입니다. 두 번째 구성 요소 (theta)는 xy 평면의 각도입니다. 벡터가 다음과 같이 표현 될 수 있다고 가정합니다.

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

이 문제를 해결하면 함수에서 계산됩니다. 2 Piy에 추가하면 각도가 02 Pi 사이가됩니다.

+0

cos (theta) * sin (phi) = acos (z_value) * sin (phi) = atan2 (yvalue, xvalue)는 어떻게 나에게 설명 할 수 있습니까? – BabaMara

+0

그것은'cos (phi) = z => phi = acos (z)'입니다. 'y'와'x '를 나눈다면'y/x = sin theta/cos theta = tan (theta)'가됩니다. 따라서, 'theta = atan (theta)'. 'atan2'를 사용하여 90 °보다 큰 각도를 얻습니다. –

+0

어리석은 질문에 대해 사과 하긴하지만 "=>"일까요? – BabaMara