70TEST(math_rotation_types, Euler3Order)
257 EXPECT_EQ((-pi * 4 / 2).wrapped(), (+pi * 0 / 2));
258 EXPECT_EQ((-pi * 3 / 2).wrapped(), (+pi * 1 / 2));
259 EXPECT_EQ((-pi * 2 / 2).wrapped(), (-pi * 2 / 2));
260 EXPECT_EQ((-pi * 1 / 2).wrapped(), (-pi * 1 / 2));
261 EXPECT_EQ((+pi * 0 / 2).wrapped(), (+pi * 0 / 2));
262 EXPECT_EQ((+pi * 1 / 2).wrapped(), (+pi * 1 / 2));
263 EXPECT_EQ((+pi * 2 / 2).wrapped(), (+pi * 2 / 2));
264 EXPECT_EQ((+pi * 3 / 2).wrapped(), (-pi * 1 / 2));
265 EXPECT_EQ((+pi * 4 / 2).wrapped(), (-pi * 0 / 2));
266 EXPECT_EQ((+pi * 0 / 2).wrapped_around(pi), (+pi * 0 / 2));
267 EXPECT_EQ((+pi * 1 / 2).wrapped_around(pi), (+pi * 1 / 2));
268 EXPECT_EQ((+pi * 2 / 2).wrapped_around(pi), (+pi * 2 / 2));
269 EXPECT_EQ((+pi * 3 / 2).wrapped_around(pi), (+pi * 3 / 2));
270 EXPECT_EQ((+pi * 4 / 2).wrapped_around(pi), (+pi * 4 / 2));
272 for (
int i = 0; i < 32; i++) {
274 EXPECT_NEAR(angle.cos(),
cos((
T(
M_PI) * i) / 16), 1e-6f);
275 EXPECT_NEAR(angle.sin(),
sin((
T(
M_PI) * i) / 16), 1e-6f);
337TEST(math_rotation_types, Euler3Conversion)
340 float3 xyz{0.350041, -0.358896, 0.528994};
341 Euler3 euler3_xyz(xyz, EulerOrder::XYZ);
342 Euler3 euler3_xzy(xyz, EulerOrder::XZY);
343 Euler3 euler3_yxz(xyz, EulerOrder::YXZ);
344 Euler3 euler3_yzx(xyz, EulerOrder::YZX);
345 Euler3 euler3_zxy(xyz, EulerOrder::ZXY);
346 Euler3 euler3_zyx(xyz, EulerOrder::ZYX);
348 Quaternion quat_xyz(0.927091f, 0.211322f, -0.124857f, 0.283295f);
349 Quaternion quat_xzy(0.943341f, 0.119427f, -0.124857f, 0.283295f);
350 Quaternion quat_yxz(0.943341f, 0.211322f, -0.124857f, 0.223297f);
351 Quaternion quat_yzx(0.927091f, 0.211322f, -0.214438f, 0.223297f);
352 Quaternion quat_zxy(0.927091f, 0.119427f, -0.214438f, 0.283295f);
353 Quaternion quat_zyx(0.943341f, 0.119427f, -0.214438f, 0.223297f);
356 {0.47251, 0.750174, -0.462572},
357 {0.35124, 0.321087, 0.879508}});
359 {0.504665, 0.810963, -0.296063},
360 {0.303231, 0.154577, 0.940296}});
362 {0.368521, 0.810963, -0.454458},
363 {0.329941, 0.342937, 0.879508}});
365 {0.323403, 0.810963, -0.487596},
366 {0.491982, 0.296063, 0.818719}});
368 {0.474061, 0.810963, -0.342937},
369 {0.465272, 0.0999405, 0.879508}});
371 {0.370072, 0.871751, -0.321087},
372 {0.457911, 0.129553, 0.879508}});
381 EXPECT_V3_NEAR(
float3(
to_euler(quat_xyz, EulerOrder::XYZ).xyz()), xyz, 1
e-4);
382 EXPECT_V3_NEAR(
float3(
to_euler(quat_xzy, EulerOrder::XZY).xyz()), xyz, 1
e-4);
383 EXPECT_V3_NEAR(
float3(
to_euler(quat_yxz, EulerOrder::YXZ).xyz()), xyz, 1
e-4);
384 EXPECT_V3_NEAR(
float3(
to_euler(quat_yzx, EulerOrder::YZX).xyz()), xyz, 1
e-4);
385 EXPECT_V3_NEAR(
float3(
to_euler(quat_zxy, EulerOrder::ZXY).xyz()), xyz, 1
e-4);
386 EXPECT_V3_NEAR(
float3(
to_euler(quat_zyx, EulerOrder::ZYX).xyz()), xyz, 1
e-4);
395 EXPECT_V3_NEAR(
float3(
to_euler(mat_xyz, EulerOrder::XYZ).xyz()), xyz, 1
e-4);
396 EXPECT_V3_NEAR(
float3(
to_euler(mat_xzy, EulerOrder::XZY).xyz()), xyz, 1
e-4);
397 EXPECT_V3_NEAR(
float3(
to_euler(mat_yxz, EulerOrder::YXZ).xyz()), xyz, 1
e-4);
398 EXPECT_V3_NEAR(
float3(
to_euler(mat_yzx, EulerOrder::YZX).xyz()), xyz, 1
e-4);
399 EXPECT_V3_NEAR(
float3(
to_euler(mat_zxy, EulerOrder::ZXY).xyz()), xyz, 1
e-4);
400 EXPECT_V3_NEAR(
float3(
to_euler(mat_zyx, EulerOrder::ZYX).xyz()), xyz, 1
e-4);
423 EXPECT_V3_NEAR(
float3(
to_euler(axis_angle_xyz, EulerOrder::XYZ).xyz()), xyz, 1
e-4);
424 EXPECT_V3_NEAR(
float3(
to_euler(axis_angle_xzy, EulerOrder::XZY).xyz()), xyz, 1
e-4);
425 EXPECT_V3_NEAR(
float3(
to_euler(axis_angle_yxz, EulerOrder::YXZ).xyz()), xyz, 1
e-4);
426 EXPECT_V3_NEAR(
float3(
to_euler(axis_angle_yzx, EulerOrder::YZX).xyz()), xyz, 1
e-4);
427 EXPECT_V3_NEAR(
float3(
to_euler(axis_angle_zxy, EulerOrder::ZXY).xyz()), xyz, 1
e-4);
428 EXPECT_V3_NEAR(
float3(
to_euler(axis_angle_zyx, EulerOrder::ZYX).xyz()), xyz, 1
e-4);