2016-09-07 6 views
2

Ich brauche Hilfe, die Mathematik hinter diesem Code zu verstehen. x Komponente der zurückgegebenen vec2 und der y-Komponente der zurückgegebenen vec2. Kann mir jemand erklären, was sie repräsentieren? Ich kenne nur diese Funktion bestimmt die Position des Vektors in Kugelkoordinaten.Berechnung von Euler-Winkeln

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)); 
} 

Antwort

4

Es wird die Berechnung der spherical coordinatesphi und theta für einen Einheitsvektor.

Die erste Komponente (phi) ist der Winkel zwischen dem Vektor und der z-Achse. Die zweite Komponente (theta) ist der Winkel in der xy-Ebene. Er geht davon aus, dass der Vektor ausgedrückt werden kann wie folgt:

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

Wenn Sie dieses Problem lösen, können Sie die Berechnungen in Ihrer Funktion erhalten. Das Hinzufügen von 2 Pi zu y stellt nur sicher, dass der Winkel zwischen 0 und 2 Pi liegt.

+0

Können Sie mir erklären, wie ist cos (theta) * sin (phi) = acos (z_value) und sin (theta) * sin (phi) = atan2 (yvalue, xvalue)? – BabaMara

+0

Es ist 'cos (phi) = z => phi = acos (z)'. Wenn Sie 'y' und' x' teilen, erhalten Sie 'y/x = sin theta/cos theta = tan (Theta)'. Somit ist "Theta = Atan (Theta)". Sie verwenden 'atan2', um auch Winkel größer als 90 ° zu erhalten. –

+0

Entschuldigung für dumme Frage, aber "=>" wäre? – BabaMara