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