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:
@ -90,7 +90,7 @@ Foam::septernion Foam::solidBodyMotionFunctions::SDA::transformation() const
|
||||
swayA_*(sin(wr*time + phs) - sin(phs)),
|
||||
heaveA_*(sin(wr*time + phh) - sin(phh))
|
||||
);
|
||||
quaternion R(rollA*sin(wr*time + phr), 0, 0);
|
||||
quaternion R(quaternion::XYZ, vector(rollA*sin(wr*time + phr), 0, 0));
|
||||
septernion TR(septernion(CofG_ + T)*R*septernion(-CofG_));
|
||||
|
||||
InfoInFunction << "Time = " << time << " transformation: " << TR << endl;
|
||||
|
||||
@ -73,7 +73,7 @@ Foam::solidBodyMotionFunctions::linearMotion::transformation() const
|
||||
// Translation of centre of gravity with constant velocity
|
||||
const vector displacement = velocity_*t;
|
||||
|
||||
quaternion R(0, 0, 0);
|
||||
quaternion R(1);
|
||||
septernion TR(septernion(displacement)*R);
|
||||
|
||||
InfoInFunction << "Time = " << t << " transformation: " << TR << endl;
|
||||
|
||||
@ -73,7 +73,7 @@ Foam::solidBodyMotionFunctions::oscillatingLinearMotion::transformation() const
|
||||
|
||||
const vector displacement = amplitude_*sin(omega_*t);
|
||||
|
||||
quaternion R(0, 0, 0);
|
||||
quaternion R(1);
|
||||
septernion TR(septernion(displacement)*R);
|
||||
|
||||
InfoInFunction << "Time = " << t << " transformation: " << TR << endl;
|
||||
|
||||
@ -81,7 +81,7 @@ transformation() const
|
||||
// Convert the rotational motion from deg to rad
|
||||
eulerAngles *= pi/180.0;
|
||||
|
||||
quaternion R(eulerAngles.x(), eulerAngles.y(), eulerAngles.z());
|
||||
quaternion R(quaternion::XYZ, eulerAngles);
|
||||
septernion TR(septernion(origin_)*R*septernion(-origin_));
|
||||
|
||||
InfoInFunction << "Time = " << t << " transformation: " << TR << endl;
|
||||
|
||||
@ -104,7 +104,7 @@ Foam::solidBodyMotionFunctions::tabulated6DoFMotion::transformation() const
|
||||
// Convert the rotational motion from deg to rad
|
||||
TRV[1] *= pi/180.0;
|
||||
|
||||
quaternion R(TRV[1].x(), TRV[1].y(), TRV[1].z());
|
||||
quaternion R(quaternion::XYZ, TRV[1]);
|
||||
septernion TR(septernion(CofG_ + TRV[0])*R*septernion(-CofG_));
|
||||
|
||||
InfoInFunction << "Time = " << t << " transformation: " << TR << endl;
|
||||
|
||||
Reference in New Issue
Block a user