nml::quat nml::eulerAnglesToQuat(const nml::vec3& vec)

Return a quaternion from euler angles.

The conversion from euler angles to quaternion is calculated this way:

\((\cos(\frac{vec.x}{2.0}) * \cos(\frac{vec.y}{2.0}) * \cos(\frac{vec.z}{2.0}) - \sin(\frac{vec.x}{2.0}) * \sin(\frac{vec.y}{2.0}) * \sin(\frac{vec.z}{2.0})) +\) \((\sin(\frac{vec.x}{2.0}) * \cos(\frac{vec.y}{2.0}) * \cos(\frac{vec.z}{2.0}) + \cos(\frac{vec.x}{2.0}) * \sin(\frac{vec.y}{2.0}) * \sin(\frac{vec.z}{2.0}))i +\) \((\cos(\frac{vec.x}{2.0}) * \sin(\frac{vec.y}{2.0}) * \cos(\frac{vec.z}{2.0}) - \sin(\frac{vec.x}{2.0}) * \cos(\frac{vec.y}{2.0}) * \sin(\frac{vec.z}{2.0}))j +\) \((\cos(\frac{vec.x}{2.0}) * \cos(\frac{vec.y}{2.0}) * \sin(\frac{vec.z}{2.0}) + \sin(\frac{vec.x}{2.0}) * \sin(\frac{vec.y}{2.0}) * \cos(\frac{vec.z}{2.0}))k\)

Example

#include "include/quat.h"
#include "include/vec3.h"
#include <iostream>

int main() {
        nml::vec3 v(1.570796f, 0.000000f, 1.570796f);
        nml::quat q = nml::eulerAnglesToQuat(v);
        std::cout << nml::to_string(q) << std::endl;

        return 0;
}

Result:

0.500000 + 0.500000i + 0.500000j + 0.500000k