// 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 namespace Passer { template class AngleOf { public: AngleOf(){}; AngleOf(T v) : value(v) {} operator T() { return value; } static AngleOf Rad2Deg; static AngleOf Deg2Rad; static AngleOf pi; bool 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 AngleOf MoveTowards(AngleOf fromAngle, AngleOf toAngle, AngleOf maxAngle); static AngleOf CosineRuleSide(float a, float b, AngleOf gamma); static AngleOf CosineRuleAngle(float a, float b, float c); static AngleOf SineRuleAngle(float a, AngleOf beta, float c); private: T value; }; using Angle = AngleOf; /* 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); }; */ } // namespace Passer using namespace Passer; #endif