/* * Author: Andrey Pokidov * License: Apache-2.0 * Date: 18 Nov 2024 */ namespace BGC { public class RadianFP32 { public const float PI = 3.1415926536f; public const float TWO_PI = 6.2831853072f; public const float HALF_OF_PI = 1.5707963268f; public const float THIRD_OF_PI = 1.0471975512f; public const float FOURTH_OF_PI = 0.7853981634f; public const float SIXTH_OF_PI = 0.5235987756f; public const float DEGREES_IN_RADIAN = 57.295779513f; public const float TURNS_IN_RADIAN = 0.1591549431f; public static float ToDegrees(float radians) { return radians * DEGREES_IN_RADIAN; } public static float ToTurns(float radians) { return radians * TURNS_IN_RADIAN; } public static float ToUnits(float radians, AngleUnit toUnit) { if (toUnit == AngleUnit.DEGREES) { return radians * DEGREES_IN_RADIAN; } if (toUnit == AngleUnit.TURNS) { return radians * TURNS_IN_RADIAN; } return radians; } public static float Normalize(float radians, AngleRange range) { if (range == AngleRange.UNSIGNED_RANGE) { if (0.0 <= radians && radians < TWO_PI) { return radians; } } else { if (-PI < radians && radians <= PI) { return radians; } } float turns = radians * TURNS_IN_RADIAN; turns -= MathF.Floor(turns); if (range == AngleRange.SIGNED_RANGE && turns > 0.5f) { turns -= 1.0f; } return turns * TWO_PI; } } }