123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- // David Eberly, Geometric Tools, Redmond WA 98052
- // Copyright (c) 1998-2020
- // Distributed under the Boost Software License, Version 1.0.
- // https://www.boost.org/LICENSE_1_0.txt
- // https://www.geometrictools.com/License/Boost/LICENSE_1_0.txt
- // Version: 4.0.2019.08.13
- #pragma once
- #include <Mathematics/Vector.h>
- // The Euler angle data structure for representing rotations. See the
- // document
- // https://www.geometrictools.com/Documentation/EulerAngles.pdf
- namespace WwiseGTE
- {
- // Factorization into Euler angles is not necessarily unique. Let the
- // integer indices for the axes be (N0,N1,N2), which must be in the set
- // {(0,1,2),(0,2,1),(1,0,2),(1,2,0),(2,0,1),(2,1,0),
- // (0,1,0),(0,2,0),(1,0,1),(1,2,1),(2,0,2),(2,1,2)}
- // Let the corresponding angles be (angleN0,angleN1,angleN2). If the
- // result is ER_NOT_UNIQUE_SUM, then the multiple solutions occur because
- // angleN2+angleN0 is constant. If the result is ER_NOT_UNIQUE_DIF, then
- // the multiple solutions occur because angleN2-angleN0 is constant. In
- // either type of nonuniqueness, the function returns angleN0=0.
- enum EulerResult
- {
- // The solution is invalid (incorrect axis indices).
- ER_INVALID,
- // The solution is unique.
- ER_UNIQUE,
- // The solution is not unique. A sum of angles is constant.
- ER_NOT_UNIQUE_SUM,
- // The solution is not unique. A difference of angles is constant.
- ER_NOT_UNIQUE_DIF
- };
- template <typename Real>
- class EulerAngles
- {
- public:
- EulerAngles()
- :
- axis{0, 0, 0},
- angle{ (Real)0, (Real)0, (Real)0 },
- result(ER_INVALID)
- {
- }
- EulerAngles(int i0, int i1, int i2, Real a0, Real a1, Real a2)
- :
- axis{ i0, i1, i2 },
- angle{ a0, a1, a2 },
- result(ER_UNIQUE)
- {
- }
- std::array<int, 3> axis;
- std::array<Real, 3> angle;
- // This member is set during conversions from rotation matrices,
- // quaternions, or axis-angles.
- EulerResult result;
- };
- }
|