// This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0.If a copy of the MPL was not distributed with this // file, You can obtain one at https ://mozilla.org/MPL/2.0/. #ifndef ANGLE_H #define ANGLE_H template class Angle2 { public: Angle2(){}; Angle2(T v) : value(v) {} operator T() { return value; } static Angle2 Rad2Deg; static Angle2 Deg2Rad; static Angle2 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); return r; }; static Angle2 MoveTowards(Angle2 fromAngle, Angle2 toAngle, Angle2 maxAngle); static Angle2 CosineRuleSide(float a, float b, Angle2 gamma); static Angle2 CosineRuleAngle(float a, float b, float c); static Angle2 SineRuleAngle(float a, Angle2 beta, float c); private: T value; }; using Angle = Angle2; /* class Angle { public: const static float Rad2Deg; const static float Deg2Rad; static float Normalize(float angle); static float Clamp(float angle, float min, float max); static float Difference(float a, float b); static float MoveTowards(float fromAngle, float toAngle, float maxAngle); static float CosineRuleSide(float a, float b, float gamma); static float CosineRuleAngle(float a, float b, float c); static float SineRuleAngle(float a, float beta, float c); }; */ #endif