Go to the documentation of this file.
37 namespace coordinateRotations
66 const eulerOrder order,
82 const scalar
c1(
cos(angle1));
const scalar s1(
sin(angle1));
83 const scalar
c2(
cos(angle2));
const scalar s2(
sin(angle2));
84 const scalar c3(
cos(angle3));
const scalar s3(
sin(angle3));
96 (
c2 ), ( -c3*s2 ), ( s2*s3 ),
97 (
c1*s2 ), (
c1*
c2*c3 - s1*s3 ), ( -c3*s1 -
c1*
c2*s3 ),
98 ( s1*s2 ), (
c1*s3 +
c2*c3*s1 ), (
c1*c3 -
c2*s1*s3 )
103 case eulerOrder::XYX:
107 (
c2 ), ( s2*s3 ), ( c3*s2 ),
108 ( s1*s2 ), (
c1*c3 -
c2*s1*s3 ), ( -
c1*s3 -
c2*c3*s1 ),
109 ( -
c1*s2 ), ( c3*s1 +
c1*
c2*s3 ), (
c1*
c2*c3 - s1*s3 )
114 case eulerOrder::YXY:
118 (
c1*c3 -
c2*s1*s3 ), ( s1*s2 ), (
c1*s3 +
c2*c3*s1 ),
119 ( s2*s3 ), (
c2 ), ( -c3*s2 ),
120 ( -c3*s1 -
c1*
c2*s3 ), (
c1*s2 ), (
c1*
c2*c3 - s1*s3 )
125 case eulerOrder::YZY:
129 (
c1*
c2*c3 - s1*s3 ), ( -
c1*s2 ), ( c3*s1 +
c1*
c2*s3 ),
130 ( c3*s2 ), (
c2 ), ( s2*s3 ),
131 (-
c1*s3 -
c2*c3*s1 ), ( s1*s2 ), (
c1*c3 -
c2*s1*s3 )
136 case eulerOrder::ZYZ:
140 (
c1*
c2*c3 - s1*s3 ), ( -c3*s1 -
c1*
c2*s3 ), (
c1*s2 ),
141 (
c1*s3 +
c2*c3*s1 ), (
c1*c3 -
c2*s1*s3 ), ( s1*s2 ),
142 ( -c3*s2 ), ( s2*s3 ), (
c2 )
147 case eulerOrder::ZXZ:
151 (
c1*c3 -
c2*s1*s3 ), ( -
c1*s3 -
c2*c3*s1 ), ( s1*s2 ),
152 ( c3*s1 +
c1*
c2*s3 ), (
c1*
c2*c3 - s1*s3 ), ( -
c1*s2 ),
153 ( s2*s3 ), ( c3*s2 ), (
c2 )
161 case eulerOrder::XZY:
165 (
c2*c3 ), ( -s2 ), (
c2*s3 ),
166 ( s1*s3 +
c1*c3*s2 ), (
c1*
c2 ), (
c1*s2*s3 - c3*s1 ),
167 ( c3*s1*s2 -
c1*s3 ), (
c2*s1 ), (
c1*c3 + s1*s2*s3 )
172 case eulerOrder::XYZ:
176 (
c2*c3 ), ( -
c2*s3 ), ( s2 ),
177 (
c1*s3 + c3*s1*s2 ), (
c1*c3 - s1*s2*s3 ), ( -
c2*s1 ),
178 ( s1*s3 -
c1*c3*s2 ), ( c3*s1 +
c1*s2*s3 ), (
c1*
c2 )
183 case eulerOrder::YXZ:
187 (
c1*c3 + s1*s2*s3 ), ( c3*s1*s2 -
c1*s3 ), (
c2*s1 ),
188 (
c2*s3 ), (
c2*c3 ), ( -s2 ),
189 (
c1*s2*s3 - c3*s1 ), (
c1*c3*s2 + s1*s3 ), (
c1*
c2 )
194 case eulerOrder::YZX:
198 (
c1*
c2 ), ( s1*s3 -
c1*c3*s2 ), ( c3*s1 +
c1*s2*s3 ),
199 ( s2 ), (
c2*c3 ), ( -
c2*s3 ),
200 ( -
c2*s1 ), (
c1*s3 + c3*s1*s2 ), (
c1*c3 - s1*s2*s3 )
205 case eulerOrder::ZYX:
209 (
c1*
c2 ), (
c1*s2*s3 - c3*s1 ), ( s1*s3 +
c1*c3*s2 ),
210 (
c2*s1 ), (
c1*c3 + s1*s2*s3 ), ( c3*s1*s2 -
c1*s3 ),
211 ( -s2 ), (
c2*s3 ), (
c2*c3 )
216 case eulerOrder::ZXY:
220 (
c1*c3 - s1*s2*s3 ), ( -
c2*s1 ), (
c1*s3 + c3*s1*s2 ),
221 ( c3*s1 +
c1*s2*s3 ), (
c1*
c2 ), ( s1*s3 -
c1*c3*s2 ),
222 ( -
c2*s3 ), ( s2 ), (
c2*c3 )
229 <<
"Unknown euler rotation order "
244 return rotation(eulerOrder::ZXZ, angles, degrees);
262 angles_(crot.angles_),
263 degrees_(crot.degrees_),
290 angles_(angle1, angle2, angle3),
300 degrees_(
dict.getOrDefault(
"degrees", true)),
330 os <<
"euler-angles(" << (degrees_ ?
"deg" :
"rad") <<
"): " << angles_;
340 os.beginBlock(keyword);
342 os.writeEntry(
"type",
type());
343 os.writeEntry(
"angles", angles_);
346 os.writeEntry(
"degrees",
"false");
350 if (order_ != eulerOrder::ZXZ)
A coordinateRotation defined in the z-x-z (intrinsic) Euler convention.
A templated (3 x 3) tensor of objects of <T> derived from MatrixSpace.
A class for handling words, derived from Foam::string.
static constexpr const zero Zero
dimensionedScalar sin(const dimensionedScalar &ds)
virtual void writeEntry(const word &keyword, Ostream &os) const
Unit conversion functions.
const Cmpt & component(const direction) const
virtual void write(Ostream &os) const
Quaternion class used to perform rotations in 3D space.
const dimensionedScalar c1
User specification of a coordinate rotation.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
OBJstream os(runTime.globalPath()/outputName)
Macros for easy insertion into run-time selection tables.
addNamedToRunTimeSelectionTable(coordinateRotation, axes, dictionary, axes)
errorManip< error > abort(error &err)
const dimensionedScalar c2
PtrList< volScalarField > & Y
constexpr scalar degToRad(const scalar deg) noexcept
static const Enum< eulerOrder > eulerOrderNames
#define FatalErrorInFunction
fileName::Type type(const fileName &name, const bool followLink=true)
List< ReturnType > get(const UPtrList< T > &list, const AccessOp &aop)
static tensor rotation(const vector &angles, bool degrees=false)
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Tensor< scalar > tensor
Tensor of scalars, i.e. Tensor<scalar>.
static const Identity< scalar > I
dimensionedScalar cos(const dimensionedScalar &ds)