Add spherical.toVector3 test (and fixes)

This commit is contained in:
Pascal Serrarens 2024-03-14 15:27:34 +01:00
parent 8e3b9e2b2d
commit 5141766de5
2 changed files with 34 additions and 3 deletions

View File

@ -51,8 +51,13 @@ Polar Spherical::ProjectOnHorizontalPlane() {
}
Vector3 Spherical::ToVector3() {
Vector3 v = Quaternion::Euler(
Vector3(-this->verticalAngle, this->horizontalAngle, 0)) *
Vector3::forward * this->distance;
// Vector3 v = Quaternion::AngleAxis(this->horizontalAngle, Vector3::up) *
// Quaternion::AngleAxis(this->verticalAngle, Vector3::left) *
// Vector3::forward * this->distance;
float verticalRad = verticalAngle * Angle::Deg2Rad;
float horizontalRad = horizontalAngle * Angle::Deg2Rad;
Vector3 v = Vector3(this->distance * cosf(verticalRad) * sinf(horizontalRad),
this->distance * sinf(verticalRad),
this->distance * cosf(verticalRad) * cosf(horizontalRad));
return v;
}

View File

@ -29,4 +29,30 @@ TEST(Spherical, FromVector3) {
EXPECT_FLOAT_EQ(s.horizontalAngle, 90.0F) << "s.hor 1 0 0";
EXPECT_FLOAT_EQ(s.verticalAngle, 0.0F) << "s.vert 1 0 0";
}
TEST(Spherical, ToVector3) {
Vector3 v = Vector3(0, 0, 1);
Spherical s = Spherical(v);
Vector3 r = s.ToVector3();
EXPECT_FLOAT_EQ(r.x, 0.0F) << "toVector3.x 0 0 1";
EXPECT_FLOAT_EQ(r.y, 0.0F) << "toVector3.y 0 0 1";
EXPECT_FLOAT_EQ(r.z, 1.0F) << "toVector3.z 0 0 1";
v = Vector3(0, 1, 0);
s = Spherical(v);
r = s.ToVector3();
EXPECT_FLOAT_EQ(r.x, 0.0F) << "toVector3.x 0 1 0";
EXPECT_FLOAT_EQ(r.y, 1.0F) << "toVector3.y 0 1 0";
EXPECT_NEAR(r.z, 0.0F, 1.0e-06) << "toVector3.z 0 1 0";
v = Vector3(1, 0, 0);
s = Spherical(v);
r = s.ToVector3();
EXPECT_FLOAT_EQ(r.x, 1.0F) << "toVector3.x 1 0 0";
EXPECT_FLOAT_EQ(r.y, 0.0F) << "toVector3.y 1 0 0";
EXPECT_NEAR(r.z, 0.0F, 1.0e-06) << "toVector3.z 1 0 0";
}
#endif