From 2d2ecf91dc03626fc48a2b080e0612b7a87b9673 Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Tue, 12 Apr 2016 21:43:03 +0100 Subject: [PATCH] quaternion: Added static member function to return a unit quaternion constructed from a vector //- Return the unit quaternion (versor) from the given vector // (w = sqrt(1 - |sqr(v)|)) static inline quaternion unit(const vector& v); --- src/OpenFOAM/primitives/quaternion/quaternion.H | 9 +++++++-- src/OpenFOAM/primitives/quaternion/quaternionI.H | 6 ++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/OpenFOAM/primitives/quaternion/quaternion.H b/src/OpenFOAM/primitives/quaternion/quaternion.H index 33e74c04a0..ab1c5379bb 100644 --- a/src/OpenFOAM/primitives/quaternion/quaternion.H +++ b/src/OpenFOAM/primitives/quaternion/quaternion.H @@ -140,12 +140,17 @@ public: const bool normalized ); - //- Construct given scalar part, the vector part = vector::zero + //- Construct a real from the given scalar part, the vector part = zero inline explicit quaternion(const scalar w); - //- Construct a pure quaternion given the vector part, scalar part = 0 + //- Construct a pure imaginary quaternion given the vector part, + // the scalar part = 0 inline explicit quaternion(const vector& v); + //- Return the unit quaternion (versor) from the given vector + // (w = sqrt(1 - |sqr(v)|)) + static inline quaternion unit(const vector& v); + //- Construct a quaternion given the three Euler angles inline quaternion ( diff --git a/src/OpenFOAM/primitives/quaternion/quaternionI.H b/src/OpenFOAM/primitives/quaternion/quaternionI.H index 3fa4013503..f2e6761576 100644 --- a/src/OpenFOAM/primitives/quaternion/quaternionI.H +++ b/src/OpenFOAM/primitives/quaternion/quaternionI.H @@ -78,6 +78,12 @@ inline Foam::quaternion::quaternion(const vector& v) {} +inline Foam::quaternion Foam::quaternion::unit(const vector& v) +{ + return quaternion(sqrt(1 - magSqr(v)), v); +} + + inline Foam::quaternion::quaternion ( const rotationSequence rs,