diff --git a/Angle.h b/Angle.h index 8be0583..b0259eb 100644 --- a/Angle.h +++ b/Angle.h @@ -16,6 +16,9 @@ class AngleOf { // AngleOf(T v) : value(v) {} // operator T() const; // { return value; } operator float() const; + + static AngleOf Degrees(float f); + inline T GetBinary() const { return this->value; } static AngleOf Rad2Deg; diff --git a/Angle16.cpp b/Angle16.cpp index d30e208..22d6748 100644 --- a/Angle16.cpp +++ b/Angle16.cpp @@ -13,7 +13,7 @@ AngleOf::AngleOf(float angle) { } // map float [-180..180) to integer [-32768..32767] - this->value = (signed short)((angle / 360.0F) * 65536.0F); + this->value = (signed short)(angle / 360.0F * 65536.0F); } template <> @@ -22,21 +22,6 @@ AngleOf::operator float() const { return f; } -// This should not exist... -// template <> -// AngleOf AngleOf::pi = 3.1415927410125732421875F; - -// template <> -// AngleOf AngleOf::Rad2Deg = 360.0f / (pi * 2); -// template <> -// AngleOf AngleOf::Deg2Rad = (pi * 2) / 360.0f; - -// template <> -// AngleOf AngleOf::Normalize( -// AngleOf angle) { -// return angle; -// } - // Not correct!!! just for syntactical compilation ATM template <> AngleOf AngleOf::CosineRuleSide( diff --git a/Angle16.h b/Angle16.h index c3f55e9..8f7dbda 100644 --- a/Angle16.h +++ b/Angle16.h @@ -8,6 +8,10 @@ namespace LinearAlgebra { typedef AngleOf Angle16; +template <> +inline static Angle16 Angle16::Degrees(float angle) { + return (angle / 360.0F * 65536.0F); +} // template <> Angle16::AngleOf(float angle) { // if (!isfinite(angle)) { // value = 0; diff --git a/Angle8.h b/Angle8.h index 580c0af..d2bba64 100644 --- a/Angle8.h +++ b/Angle8.h @@ -8,6 +8,11 @@ namespace LinearAlgebra { typedef AngleOf Angle8; +template <> +inline static Angle8 Angle8::Degrees(float angle) { + return (angle / 360.0F * 256.0F); +} + // template <> Angle8::AngleOf(float angle) { // if (!isfinite(angle)) { // value = 0;