Update to eulerAngles static function in finiteRotation
This commit is contained in:
parent
260f2329cc
commit
0a13a399e7
2 changed files with 8 additions and 14 deletions
|
@ -77,21 +77,15 @@ Foam::vector Foam::finiteRotation::eulerAngles(const tensor& rotT)
|
||||||
scalar& pitchAngle = eulerAngles.y();
|
scalar& pitchAngle = eulerAngles.y();
|
||||||
scalar& yawAngle = eulerAngles.z();
|
scalar& yawAngle = eulerAngles.z();
|
||||||
|
|
||||||
// Calculate roll angle
|
|
||||||
rollAngle = atan2(rotT.yz(), rotT.zz());
|
|
||||||
|
|
||||||
// Use mag to avoid negative value due to round-off, HJ, 24/Feb/2016
|
|
||||||
// Bugfix: missing sqr. SS, 18/Apr/2016
|
|
||||||
const scalar c2 = sqrt(sqr(rotT.xx()) + sqr(rotT.xy()));
|
|
||||||
|
|
||||||
// Calculate pitch angle
|
// Calculate pitch angle
|
||||||
pitchAngle = atan2(-rotT.xz(), c2);
|
pitchAngle = asin(rotT.xz());
|
||||||
|
|
||||||
const scalar s1 = sin(rollAngle);
|
// Calculate roll angle
|
||||||
const scalar c1 = cos(rollAngle);
|
const scalar cosPitch = cos(pitchAngle);
|
||||||
|
rollAngle = asin(-rotT.yz()/cosPitch);
|
||||||
|
|
||||||
// Calculate yaw angle
|
// Calculate yaw angle
|
||||||
yawAngle = atan2(s1*rotT.zx() - c1*rotT.yx(), c1*rotT.yy() - s1*rotT.zy());
|
yawAngle = asin(-rotT.xy()/cosPitch);
|
||||||
|
|
||||||
return eulerAngles;
|
return eulerAngles;
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,9 +70,9 @@ class finiteRotation
|
||||||
//- Calculate rotation angle from given rotation tensor
|
//- Calculate rotation angle from given rotation tensor
|
||||||
static scalar rotAngle(const tensor& rotT);
|
static scalar rotAngle(const tensor& rotT);
|
||||||
|
|
||||||
//- Calculate Euler angles (x-y-z (roll-pitch-yaw) convention) from
|
//- Calculate Euler angles (x-y-z (roll-pitch-yaw) convention by Bryan)
|
||||||
// given rotation tensor. Reference: Mike Day, Insomniac Games,
|
// given the rotation tensor (global-to-local transformation).
|
||||||
// Extracting Euler Angles from a Rotation Matrix.
|
// Reference: Nikravesh: Computer-Aided Analysis of Mechanical Systems
|
||||||
static vector eulerAngles(const tensor& rotT);
|
static vector eulerAngles(const tensor& rotT);
|
||||||
|
|
||||||
|
|
||||||
|
|
Reference in a new issue