41 EXPECT_DOUBLE_EQ(q.
real(), 1.0);
42 EXPECT_DOUBLE_EQ(q(0), 1.0);
43 EXPECT_DOUBLE_EQ(q(1), 2.0);
44 EXPECT_DOUBLE_EQ(q(2), 3.0);
45 EXPECT_DOUBLE_EQ(q(3), 4.0);
49 ippl::Vector<double, 3> vec(1.0, 2.0, 3.0);
51 EXPECT_DOUBLE_EQ(q.
real(), 0.0);
52 EXPECT_DOUBLE_EQ(q(1), 1.0);
53 EXPECT_DOUBLE_EQ(q(2), 2.0);
54 EXPECT_DOUBLE_EQ(q(3), 3.0);
59 ippl::Vector<double, 3> vec(1.0, 2.0, 3.0);
61 EXPECT_DOUBLE_EQ(q.
real(), 0.5);
62 EXPECT_DOUBLE_EQ(q(1), 1.0);
63 EXPECT_DOUBLE_EQ(q(2), 2.0);
64 EXPECT_DOUBLE_EQ(q(3), 3.0);
188 EXPECT_NEAR(result1.
real(), result2.
real(), 1e-10);
189 EXPECT_NEAR(result1(1), result2(1), 1e-10);
190 EXPECT_NEAR(result1(2), result2(2), 1e-10);
191 EXPECT_NEAR(result1(3), result2(3), 1e-10);
196 double angle = M_PI / 2.0;
197 ippl::Vector<double, 3> axis(0.0, 0.0, 1.0);
198 Quaternion q(std::cos(angle / 2.0), std::sin(angle / 2.0) * axis);
200 ippl::Vector<double, 3> vec(1.0, 0.0, 0.0);
201 ippl::Vector<double, 3> rotated = q.
rotate(vec);
203 EXPECT_NEAR(rotated(0), 0.0, 1e-12);
204 EXPECT_NEAR(rotated(1), 1.0, 1e-12);
205 EXPECT_NEAR(rotated(2), 0.0, 1e-12);
211 ippl::Vector<double, 3> axis(1.0, 0.0, 0.0);
212 Quaternion q(std::cos(angle / 2.0), std::sin(angle / 2.0) * axis);
214 ippl::Vector<double, 3> vec(0.0, 1.0, 0.0);
215 ippl::Vector<double, 3> rotated = q.
rotate(vec);
217 EXPECT_NEAR(rotated(0), 0.0, 1e-12);
218 EXPECT_NEAR(rotated(1), -1.0, 1e-12);
219 EXPECT_NEAR(rotated(2), 0.0, 1e-12);
226 ippl::Vector<double, 3> vec(1.0, 2.0, 3.0);
227 ippl::Vector<double, 3> rotated = q.
rotate(vec);
229 EXPECT_NEAR(rotated(0), vec(0), 1e-12);
230 EXPECT_NEAR(rotated(1), vec(1), 1e-12);
231 EXPECT_NEAR(rotated(2), vec(2), 1e-12);
236 double angle = M_PI / 2.0;
237 ippl::Vector<double, 3> axis(0.0, 0.0, 1.0);
238 Quaternion q(std::cos(angle / 2.0), std::sin(angle / 2.0) * axis);
246 EXPECT_NEAR(R(0, 0), 0.0, 1e-12);
247 EXPECT_NEAR(R(0, 1), -1.0, 1e-12);
248 EXPECT_NEAR(R(0, 2), 0.0, 1e-12);
249 EXPECT_NEAR(R(1, 0), 1.0, 1e-12);
250 EXPECT_NEAR(R(1, 1), 0.0, 1e-12);
251 EXPECT_NEAR(R(1, 2), 0.0, 1e-12);
252 EXPECT_NEAR(R(2, 0), 0.0, 1e-12);
253 EXPECT_NEAR(R(2, 1), 0.0, 1e-12);
254 EXPECT_NEAR(R(2, 2), 1.0, 1e-12);
262 EXPECT_NEAR(R(0, 0), 1.0, 1e-12);
263 EXPECT_NEAR(R(0, 1), 0.0, 1e-12);
264 EXPECT_NEAR(R(0, 2), 0.0, 1e-12);
265 EXPECT_NEAR(R(1, 0), 0.0, 1e-12);
266 EXPECT_NEAR(R(1, 1), 1.0, 1e-12);
267 EXPECT_NEAR(R(1, 2), 0.0, 1e-12);
268 EXPECT_NEAR(R(2, 0), 0.0, 1e-12);
269 EXPECT_NEAR(R(2, 1), 0.0, 1e-12);
270 EXPECT_NEAR(R(2, 2), 1.0, 1e-12);
314 ippl::Vector<double, 3> u(1.0, 0.0, 0.0);
315 ippl::Vector<double, 3> ref(0.0, 1.0, 0.0);
323 ippl::Vector<double, 3> rotated = q.
rotate(u);
324 EXPECT_NEAR(rotated(0), ref(0), 1e-12);
325 EXPECT_NEAR(rotated(1), ref(1), 1e-12);
326 EXPECT_NEAR(rotated(2), ref(2), 1e-12);
330 ippl::Vector<double, 3> u(1.0, 0.0, 0.0);
331 ippl::Vector<double, 3> ref(-1.0, 0.0, 0.0);
337 EXPECT_NEAR(q.
real(), 0.0, 1e-12);
340 ippl::Vector<double, 3> rotated = q.
rotate(u);
341 EXPECT_NEAR(rotated(0), ref(0), 1e-10);
342 EXPECT_NEAR(rotated(1), ref(1), 1e-10);
343 EXPECT_NEAR(rotated(2), ref(2), 1e-10);
357 EXPECT_NEAR(result.
real(), q.
Norm(), 1e-12);
358 EXPECT_NEAR(result(1), 0.0, 1e-12);
359 EXPECT_NEAR(result(2), 0.0, 1e-12);
360 EXPECT_NEAR(result(3), 0.0, 1e-12);
Quaternion getQuaternion(ippl::Vector< double, 3 > u, ippl::Vector< double, 3 > ref)
Return a unit quaternion that rotates vec onto reference.