Addedfirst Polar test
This commit is contained in:
parent
395f82dc0c
commit
7b85556f1e
@ -43,6 +43,7 @@ else()
|
|||||||
"test/Vector3_test.cc"
|
"test/Vector3_test.cc"
|
||||||
"test/Quaternion_test.cc"
|
"test/Quaternion_test.cc"
|
||||||
"test/Matrix_test.cc"
|
"test/Matrix_test.cc"
|
||||||
|
"test/Polar_test.cc"
|
||||||
"test/Spherical_test.cc"
|
"test/Spherical_test.cc"
|
||||||
)
|
)
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
|
@ -19,6 +19,13 @@ Polar::Polar(float newAngle, float newDistance) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Polar::Polar(Vector2 v) {
|
||||||
|
angle = Vector2::SignedAngle(
|
||||||
|
Vector2::forward,
|
||||||
|
v); // atan2(v.x, sqrt(v.z * v.z + v.y * v.y)) * Angle::Rad2Deg;
|
||||||
|
distance = v.magnitude();
|
||||||
|
}
|
||||||
|
|
||||||
const Polar Polar::zero = Polar(0, 0);
|
const Polar Polar::zero = Polar(0, 0);
|
||||||
|
|
||||||
float Polar::Distance(const Polar &v1, const Polar &v2) {
|
float Polar::Distance(const Polar &v1, const Polar &v2) {
|
||||||
|
6
Polar.h
6
Polar.h
@ -5,6 +5,8 @@
|
|||||||
#ifndef POLAR_H
|
#ifndef POLAR_H
|
||||||
#define POLAR_H
|
#define POLAR_H
|
||||||
|
|
||||||
|
struct Vector2;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A polar vector
|
/// A polar vector
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -34,6 +36,8 @@ struct Polar {
|
|||||||
/// <param name="distance">The distance in meters</param>
|
/// <param name="distance">The distance in meters</param>
|
||||||
Polar(float angle, float distance);
|
Polar(float angle, float distance);
|
||||||
|
|
||||||
|
Polar(Vector2 v);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A polar vector with zero degrees and distance
|
/// A polar vector with zero degrees and distance
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -95,4 +99,6 @@ struct Polar {
|
|||||||
static Polar Rotate(Polar v, float angle);
|
static Polar Rotate(Polar v, float angle);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#include "Vector2.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -116,7 +116,7 @@ float Vector2::SignedAngle(Vector2 from, Vector2 to) {
|
|||||||
|
|
||||||
float angleFrom = atan2(from.y, from.x);
|
float angleFrom = atan2(from.y, from.x);
|
||||||
float angleTo = atan2(to.y, to.x);
|
float angleTo = atan2(to.y, to.x);
|
||||||
return (angleTo - angleFrom) * Angle::Rad2Deg;
|
return -(angleTo - angleFrom) * Angle::Rad2Deg;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector2 Vector2::Rotate(Vector2 v, float angle) {
|
Vector2 Vector2::Rotate(Vector2 v, float angle) {
|
||||||
|
29
test/Polar_test.cc
Normal file
29
test/Polar_test.cc
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#if GTEST
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include <limits>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
#include "Polar.h"
|
||||||
|
|
||||||
|
#define FLOAT_INFINITY std::numeric_limits<float>::infinity()
|
||||||
|
|
||||||
|
TEST(Polar, FromVector2) {
|
||||||
|
Vector2 v = Vector2(0, 1);
|
||||||
|
Polar p = Polar::Polar(v);
|
||||||
|
|
||||||
|
EXPECT_FLOAT_EQ(p.distance, 1.0F) << "p.distance 0 1";
|
||||||
|
EXPECT_FLOAT_EQ(p.angle, 0.0F) << "s.angle 0 0 1";
|
||||||
|
|
||||||
|
v = Vector2(1, 0);
|
||||||
|
p = Polar::Polar(v);
|
||||||
|
|
||||||
|
EXPECT_FLOAT_EQ(p.distance, 1.0F) << "p.distance 1 0";
|
||||||
|
EXPECT_FLOAT_EQ(p.angle, 90.0F) << "s.angle 1 0";
|
||||||
|
|
||||||
|
v = Vector2(-1, 1);
|
||||||
|
p = Polar::Polar(v);
|
||||||
|
|
||||||
|
EXPECT_FLOAT_EQ(p.distance, sqrt(2.0F)) << "p.distance -1 1";
|
||||||
|
EXPECT_NEAR(p.angle, -45.0F, 1.0e-05) << "s.angle -1 1";
|
||||||
|
}
|
||||||
|
#endif
|
@ -399,11 +399,11 @@ TEST(Vector2, SignedAngle) {
|
|||||||
bool r = false;
|
bool r = false;
|
||||||
|
|
||||||
f = Vector2::SignedAngle(v1, v2);
|
f = Vector2::SignedAngle(v1, v2);
|
||||||
EXPECT_FLOAT_EQ(f, 12.09476F) << "SignedAngle(4 5, 1 2)";
|
EXPECT_FLOAT_EQ(f, -12.09476F) << "SignedAngle(4 5, 1 2)";
|
||||||
|
|
||||||
v2 = Vector2(-1, -2);
|
v2 = Vector2(-1, -2);
|
||||||
f = Vector2::SignedAngle(v1, v2);
|
f = Vector2::SignedAngle(v1, v2);
|
||||||
EXPECT_FLOAT_EQ(f, -167.9052F) << "SignedAngle(4 5, -1 -2)";
|
EXPECT_FLOAT_EQ(f, 167.9052F) << "SignedAngle(4 5, -1 -2)";
|
||||||
|
|
||||||
v2 = Vector2(0, 0);
|
v2 = Vector2(0, 0);
|
||||||
f = Vector2::SignedAngle(v1, v2);
|
f = Vector2::SignedAngle(v1, v2);
|
||||||
@ -420,6 +420,16 @@ TEST(Vector2, SignedAngle) {
|
|||||||
r = isnan(f);
|
r = isnan(f);
|
||||||
EXPECT_TRUE(r) << "SignedAngle(4 5, -INFINITY -INFINITY)";
|
EXPECT_TRUE(r) << "SignedAngle(4 5, -INFINITY -INFINITY)";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
v1 = Vector2(0, 1);
|
||||||
|
v2 = Vector2(1, 0);
|
||||||
|
f = Vector2::SignedAngle(v1, v2);
|
||||||
|
EXPECT_FLOAT_EQ(f, 90.0F) << "SignedAngle(0 1, 1 0)";
|
||||||
|
|
||||||
|
v1 = Vector2(0, 1);
|
||||||
|
v2 = Vector2(0, -1);
|
||||||
|
f = Vector2::SignedAngle(v1, v2);
|
||||||
|
EXPECT_FLOAT_EQ(f, 180.0F) << "SignedAngle(0 1, 1 0)";
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Vector2, Rotate) {
|
TEST(Vector2, Rotate) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user