17TEST(RadarPolarToCartesian, depth_zero_collapses_to_origin) {
19 EXPECT_NEAR(p[0], 0.0f, kEps);
20 EXPECT_NEAR(p[1], 0.0f, kEps);
21 EXPECT_NEAR(p[2], 0.0f, kEps);
24TEST(RadarPolarToCartesian, pure_depth_lands_on_x_axis) {
28 EXPECT_NEAR(p[0], 10.0f, kEps);
29 EXPECT_NEAR(p[1], 0.0f, kEps);
30 EXPECT_NEAR(p[2], 0.0f, kEps);
33TEST(RadarPolarToCartesian, positive_azimuth_flips_y_to_negative) {
36 constexpr float kHalfPi =
static_cast<float>(M_PI) / 2.0f;
38 EXPECT_NEAR(p[0], 0.0f, kEps);
39 EXPECT_NEAR(p[1], -10.0f, kEps);
40 EXPECT_NEAR(p[2], 0.0f, kEps);
43TEST(RadarPolarToCartesian, positive_altitude_lifts_z) {
45 constexpr float kHalfPi =
static_cast<float>(M_PI) / 2.0f;
47 EXPECT_NEAR(p[0], 0.0f, kEps);
48 EXPECT_NEAR(p[1], 0.0f, kEps);
49 EXPECT_NEAR(p[2], 10.0f, kEps);
52TEST(RadarPolarToCartesian, negative_azimuth_mirrors_y) {
54 constexpr float kHalfPi =
static_cast<float>(M_PI) / 2.0f;
56 EXPECT_NEAR(p[0], 0.0f, kEps);
57 EXPECT_NEAR(p[1], 10.0f, kEps);
58 EXPECT_NEAR(p[2], 0.0f, kEps);
61TEST(RadarPolarToCartesian, combined_polar_matches_hand_computed) {
63 constexpr float depth = 2.0f;
64 const float azimuth =
static_cast<float>(M_PI) / 4.0f;
65 const float altitude =
static_cast<float>(M_PI) / 6.0f;
68 const float expected_x = depth * std::cos(
azimuth) * std::cos(-altitude);
69 const float expected_y = depth * std::sin(-
azimuth) * std::cos(altitude);
70 const float expected_z = depth * std::sin(altitude);
72 EXPECT_NEAR(p[0], expected_x, kEps);
73 EXPECT_NEAR(p[1], expected_y, kEps);
74 EXPECT_NEAR(p[2], expected_z, kEps);