bgc-net/BasicGeometry/RadianFP64.cs

75 lines
1.9 KiB
C#

/*
* Author: Andrey Pokidov
* Date: 18 Nov 2024
*/
namespace BasicGeometry
{
public class RadianFP64
{
public const double PI = 3.14159265358979324;
public const double TWO_PI = 6.28318530717958648;
public const double HALF_OF_PI = 1.57079632679489662;
public const double THIRD_OF_PI = 1.04719755119659775;
public const double FOURTH_OF_PI = 0.78539816339744831;
public const double SIXTH_OF_PI = 0.523598775598298873;
public const double DEGREES_IN_RADIAN = 57.2957795130823209;
public const double TURNS_IN_RADIAN = 0.159154943091895336;
public static double ToDegrees(double radians)
{
return radians * DEGREES_IN_RADIAN;
}
public static double ToTurns(double radians)
{
return radians * TURNS_IN_RADIAN;
}
public static double ToUnits(double 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 double Normalize(double 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;
}
}
double turns = radians * TURNS_IN_RADIAN;
turns -= Math.Floor(turns);
if (range == AngleRange.SIGNED_RANGE && turns > 0.5)
{
turns -= 1.0;
}
return turns * TWO_PI;
}
}
}