/* * Author: Andrey Pokidov * License: Apache-2.0 * Date: 1 Feb 2019 */ namespace BGC { public static class AngleFP32 { public static float ToRadians(float angle, AngleUnit unit) { if (unit == AngleUnit.DEGREES) { return angle * DegreeFP32.RADIANS_IN_DEGREE; } if (unit == AngleUnit.TURNS) { return angle * RadianFP32.TWO_PI; } return angle; } public static float ToDegrees(float angle, AngleUnit unit) { if (unit == AngleUnit.RADIANS) { return angle * RadianFP32.DEGREES_IN_RADIAN; } if (unit == AngleUnit.TURNS) { return angle * 360.0f; } return angle; } public static float ToTurns(float angle, AngleUnit unit) { if (unit == AngleUnit.RADIANS) { return angle * RadianFP32.TURNS_IN_RADIAN; } if (unit == AngleUnit.DEGREES) { return angle * DegreeFP32.TURNS_IN_DEGREE; } return angle; } public static float GetFullCircle(AngleUnit unit) { if (unit == AngleUnit.DEGREES) { return 360.0f; } if (unit == AngleUnit.TURNS) { return 1.0f; } return RadianFP32.TWO_PI; } public static float GetHalfCircle(AngleUnit unit) { if (unit == AngleUnit.DEGREES) { return 180.0f; } if (unit == AngleUnit.TURNS) { return 0.5f; } return RadianFP32.PI; } public static float GetQuarterCircle(AngleUnit unit) { if (unit == AngleUnit.DEGREES) { return 90.0f; } if (unit == AngleUnit.TURNS) { return 0.25f; } return RadianFP32.HALF_OF_PI; } public static float Normalize(float angle, AngleUnit unit, AngleRange range) { if (unit == AngleUnit.DEGREES) { return DegreeFP32.Normalize(angle, range); } if (unit == AngleUnit.TURNS) { return TurnFP32.Normalize(angle, range); } return RadianFP32.Normalize(angle, range); } } }