1#include "gtest/gtest.h"
9 constexpr double tol = 1
e-12;
11 using Vector3 = ippl::Vector<double, 3>;
14 return Quaternion(std::cos(0.5 * angle), std::sin(0.5 * angle), 0.0, 0.0);
18 return Quaternion(std::cos(0.5 * angle), 0.0, std::sin(0.5 * angle), 0.0);
22 return Quaternion(std::cos(0.5 * angle), 0.0, 0.0, std::sin(0.5 * angle));
25 void expectVectorNear(
const Vector3& actual,
const Vector3& expected,
double tolerance = tol) {
26 EXPECT_NEAR(actual(0), expected(0), tolerance);
27 EXPECT_NEAR(actual(1), expected(1), tolerance);
28 EXPECT_NEAR(actual(2), expected(2), tolerance);
36 char** argv =
nullptr;
38 ippl::initialize(argc, argv);
46 Vector3 point(1.0, -2.0, 3.0);
47 Vector3 vector(-4.0, 5.0, -6.0);
49 expectVectorNear(trafo.
getOrigin(), Vector3(0.0));
57 expectVectorNear(trafo.
rotateTo(vector), vector);
58 expectVectorNear(trafo.
rotateFrom(vector), vector);
63 Vector3 point(2.5, 3.0, -1.0);
72 Vector3 vector(1.0, -4.0, 2.0);
74 const Vector3 local = trafo.
rotateTo(vector);
76 expectVectorNear(trafo.
rotateFrom(local), vector);
82 Vector3 point(3.0, -2.0, 0.5);
83 Vector3 vector(-1.0, 5.0, 2.0);
107 Vector3 point(4.0, -2.0, 1.0);
116 Vector3 vector(3.0, -1.0, 2.0);
TEST_F(CoordinateSystemTrafoTest, DefaultConstructorIsIdentity)
static void TearDownTestSuite()
static void SetUpTestSuite()
Rigid spatial transform between a parent frame and a local frame.
ippl::Vector< double, 3 > getOrigin() const
ippl::Vector< double, 3 > transformFrom(const ippl::Vector< double, 3 > &r) const
Map a point from the local frame back to the parent frame.
ippl::Vector< double, 3 > rotateFrom(const ippl::Vector< double, 3 > &r) const
Rotate a vector from the local frame back into the parent frame.
ippl::Vector< double, 3 > rotateTo(const ippl::Vector< double, 3 > &r) const
Rotate a vector from the parent frame into the local frame.
ippl::Vector< double, 3 > transformTo(const ippl::Vector< double, 3 > &r) const
Map a point from the parent frame to the local frame.
CoordinateSystemTrafo inverted() const
Return the inverse transform.
Quaternion getRotation() const
void invert()
Invert the transform in place.
Quaternion storage and rotation algebra used by OPALX geometry code.
double real() const
Return the scalar part .
constexpr double e
The value of.