bgc-net/BasicGeometry/RadianFP32.cs

76 lines
1.9 KiB
C#

/*
* 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;
}
}
}