diff --git a/CMakeLists.txt b/CMakeLists.txt index d61999d..9fe0261 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,7 @@ else() "test/Vector3_test.cc" "test/Quaternion_test.cc" "test/Matrix_test.cc" + "test/Spherical_test.cc" ) target_link_libraries( VectorAlgebraTest diff --git a/Spherical.cpp b/Spherical.cpp index 4b230e4..7253a09 100644 --- a/Spherical.cpp +++ b/Spherical.cpp @@ -32,9 +32,9 @@ Spherical::Spherical(float distance, Angle horizontalAngle, Angle verticalAngle) Spherical::Spherical(Vector3 v) { float signZ = (v.z >= 0) - (v.z < 0); - horizontalAngle = + verticalAngle = atan2(v.y, signZ * sqrt(v.z * v.z + v.x * v.x)) * Angle::Rad2Deg; - verticalAngle = -atan2(v.x, sqrt(v.z * v.z + v.y * v.y)) * Angle::Rad2Deg; + horizontalAngle = atan2(v.x, sqrt(v.z * v.z + v.y * v.y)) * Angle::Rad2Deg; distance = v.magnitude(); } diff --git a/test/Spherical_test.cc b/test/Spherical_test.cc new file mode 100644 index 0000000..7ce4e5a --- /dev/null +++ b/test/Spherical_test.cc @@ -0,0 +1,32 @@ +#if GTEST +#include +#include +#include + +#include "Spherical.h" + +#define FLOAT_INFINITY std::numeric_limits::infinity() + +TEST(Spherical, FromVector3) { + Vector3 v = Vector3(0, 0, 1); + Spherical s = Spherical::Spherical(v); + + EXPECT_FLOAT_EQ(s.distance, 1.0F) << "s.distance 0 0 1"; + EXPECT_FLOAT_EQ(s.horizontalAngle, 0.0F) << "s.hor 0 0 1"; + EXPECT_FLOAT_EQ(s.verticalAngle, 0.0F) << "s.vert 0 0 1"; + + v = Vector3(0, 1, 0); + s = Spherical::Spherical(v); + + EXPECT_FLOAT_EQ(s.distance, 1.0F) << "s.distance 0 1 0"; + EXPECT_FLOAT_EQ(s.horizontalAngle, 0.0F) << "s.hor 0 1 0"; + EXPECT_FLOAT_EQ(s.verticalAngle, 90.0F) << "s.vert 0 1 0"; + + v = Vector3(1, 0, 0); + s = Spherical::Spherical(v); + + EXPECT_FLOAT_EQ(s.distance, 1.0F) << "s.distance 1 0 0"; + EXPECT_FLOAT_EQ(s.horizontalAngle, 90.0F) << "s.hor 1 0 0"; + EXPECT_FLOAT_EQ(s.verticalAngle, 0.0F) << "s.vert 1 0 0"; +} +#endif \ No newline at end of file