diff --git a/Angle.cpp b/Angle.cpp index 4a039ce..3cb21e3 100644 --- a/Angle.cpp +++ b/Angle.cpp @@ -73,12 +73,16 @@ float Angle::SineRuleAngle(float a, float beta, float b) { */ //---------------------- -template <> Angle2 Angle2::pi = 3.1415927410125732421875F; +template <> AngleOf AngleOf::pi = 3.1415927410125732421875F; -template <> Angle2 Angle2::Rad2Deg = 360.0f / (pi * 2); -template <> Angle2 Angle2::Deg2Rad = (pi * 2) / 360.0f; +template <> AngleOf AngleOf::Rad2Deg = 360.0f / (pi * 2); +template <> AngleOf AngleOf::Deg2Rad = (pi * 2) / 360.0f; -template <> Angle2 Angle2::Normalize(Angle2 angle) { +template <> bool Passer::AngleOf::operator==(AngleOf a) { + return (float)*this == (float)a; +} + +template <> AngleOf AngleOf::Normalize(AngleOf angle) { float angleValue = angle; if (!isfinite(angleValue)) return angleValue; @@ -91,8 +95,8 @@ template <> Angle2 Angle2::Normalize(Angle2 angle) { } template <> -Angle2 Angle2::Clamp(Angle2 angle, Angle2 min, - Angle2 max) { +AngleOf AngleOf::Clamp(AngleOf angle, AngleOf min, + AngleOf max) { float normalizedAngle = Normalize(angle); float r = Float::Clamp(normalizedAngle, min, max); return r; @@ -105,9 +109,9 @@ Angle2 Angle2::Clamp(Angle2 angle, Angle2 min, // } template <> -Angle2 Angle2::MoveTowards(Angle2 fromAngle, - Angle2 toAngle, - Angle2 maxAngle) { +AngleOf AngleOf::MoveTowards(AngleOf fromAngle, + AngleOf toAngle, + AngleOf maxAngle) { float d = toAngle - fromAngle; float sign = signbit(d) ? -1 : 1; d = sign * Float::Clamp(fabs(d), 0, maxAngle); @@ -115,11 +119,11 @@ Angle2 Angle2::MoveTowards(Angle2 fromAngle, } template <> -Angle2 Angle2::CosineRuleSide(float a, float b, - Angle2 gamma) { +AngleOf AngleOf::CosineRuleSide(float a, float b, + AngleOf gamma) { float a2 = a * a; float b2 = b * b; - float d = a2 + b2 - 2 * a * b * cos(gamma * Angle2::Deg2Rad); + float d = a2 + b2 - 2 * a * b * cos(gamma * AngleOf::Deg2Rad); // Catch edge cases where float inacuracies lead tot nans if (d < 0) return 0; @@ -129,7 +133,7 @@ Angle2 Angle2::CosineRuleSide(float a, float b, } template <> -Angle2 Angle2::CosineRuleAngle(float a, float b, float c) { +AngleOf AngleOf::CosineRuleAngle(float a, float b, float c) { float a2 = a * a; float b2 = b * b; float c2 = c * c; @@ -145,8 +149,8 @@ Angle2 Angle2::CosineRuleAngle(float a, float b, float c) { } template <> -Angle2 Angle2::SineRuleAngle(float a, Angle2 beta, - float b) { +AngleOf AngleOf::SineRuleAngle(float a, AngleOf beta, + float b) { float alpha = asin(a * sin(beta * Angle::Deg2Rad) / b); return alpha; } \ No newline at end of file diff --git a/Angle.h b/Angle.h index 6f130ff..1cb2b8e 100644 --- a/Angle.h +++ b/Angle.h @@ -7,36 +7,38 @@ namespace Passer { -template class Angle2 { +template class AngleOf { public: - Angle2(){}; - Angle2(T v) : value(v) {} + AngleOf(){}; + AngleOf(T v) : value(v) {} operator T() { return value; } - static Angle2 Rad2Deg; - static Angle2 Deg2Rad; + static AngleOf Rad2Deg; + static AngleOf Deg2Rad; - static Angle2 pi; + static AngleOf pi; - static Angle2 Normalize(Angle2 angle); - static Angle2 Clamp(Angle2 angle, Angle2 min, Angle2 max); - static Angle2 Difference(Angle2 a, Angle2 b) { - Angle2 r = Normalize(b - a); + bool AngleOf::operator==(AngleOf a); + + static AngleOf Normalize(AngleOf a); + static AngleOf Clamp(AngleOf a, AngleOf min, AngleOf max); + static AngleOf Difference(AngleOf a, AngleOf b) { + AngleOf r = Normalize(b - a); return r; }; - static Angle2 MoveTowards(Angle2 fromAngle, Angle2 toAngle, - Angle2 maxAngle); + static AngleOf MoveTowards(AngleOf fromAngle, AngleOf toAngle, + AngleOf maxAngle); - static Angle2 CosineRuleSide(float a, float b, Angle2 gamma); - static Angle2 CosineRuleAngle(float a, float b, float c); + static AngleOf CosineRuleSide(float a, float b, AngleOf gamma); + static AngleOf CosineRuleAngle(float a, float b, float c); - static Angle2 SineRuleAngle(float a, Angle2 beta, float c); + static AngleOf SineRuleAngle(float a, AngleOf beta, float c); private: T value; }; -using Angle = Angle2; +using Angle = AngleOf; /* class Angle { public: