mirror of
https://github.com/OpenFOAM/OpenFOAM-6.git
synced 2025-12-08 06:57:46 +00:00
quaternion: Added generalized construction from and conversion to Euler-angles
The particular rotation sequence is specified via the enumeration:
//- Euler-angle rotation sequence
enum rotationSequence
{
ZYX, ZYZ, ZXY, ZXZ, YXZ, YXY, YZX, YZY, XYZ, XYX, XZY, XZX
};
and provided as an argument to the constructor from Euler-angles
//- Construct a quaternion given the three Euler angles:
inline quaternion
(
const rotationSequence rs,
const vector& angles
);
and conversion to Euler-angles:
//- Return a vector of euler angles corresponding to the
// specified rotation sequence
inline vector eulerAngles(const rotationSequence rs) const;
This commit is contained in:
@ -1,10 +1,43 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Application
|
||||
Test-quaternion
|
||||
|
||||
Description
|
||||
Test application for quaternions.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "quaternion.H"
|
||||
#include "septernion.H"
|
||||
#include "IOstreams.H"
|
||||
|
||||
using namespace Foam;
|
||||
|
||||
int main()
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
quaternion q(vector(1, 0, 0), 0.7853981);
|
||||
Info<< "q " << q << endl;
|
||||
@ -36,5 +69,32 @@ int main()
|
||||
*septernion(vector(0, 1, 0))).transform(v)
|
||||
<< endl;
|
||||
|
||||
Info<< "Test conversion from and to Euler-angles" << endl;
|
||||
vector angles(0.1, 0.2, 0.3);
|
||||
for (int rs=quaternion::ZYX; rs<quaternion::XZX; ++rs)
|
||||
{
|
||||
if
|
||||
(
|
||||
mag
|
||||
(
|
||||
angles
|
||||
- quaternion(quaternion::rotationSequence(rs), angles)
|
||||
.eulerAngles(quaternion::rotationSequence(rs))
|
||||
)
|
||||
> SMALL
|
||||
)
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "Inconsistent conversion for rotation sequence "
|
||||
<< rs << exit(FatalError)
|
||||
<< endl;
|
||||
}
|
||||
}
|
||||
|
||||
Info<< "End\n" << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
Reference in New Issue
Block a user