AngleConverter.cs 1.89 KB
namespace Rcs.Shared.Utils
{
    /// <summary>
    /// 角度弧度转换工具类,支持多圈角度处理
    /// @author zzy
    /// </summary>
    public static class AngleConverter
    {
        /// <summary>
        /// 弧度转角度(支持多圈,保留完整圈数信息)
        /// </summary>
        /// <param name="radians">弧度值</param>
        /// <returns>角度值</returns>
        public static double ToDegrees(double radians) => radians * (180.0 / Math.PI);

        /// <summary>
        /// 角度转弧度(支持多圈,保留完整圈数信息)
        /// </summary>
        /// <param name="degrees">角度值</param>
        /// <returns>弧度值</returns>
        public static double ToRadians(double degrees) => degrees * (Math.PI / 180.0);

        /// <summary>
        /// 弧度转角度(可空类型)
        /// </summary>
        public static double? ToDegrees(double? radians) => radians.HasValue ? ToDegrees(radians.Value) : null;

        /// <summary>
        /// 角度转弧度(可空类型)
        /// </summary>
        public static double? ToRadians(double? degrees) => degrees.HasValue ? ToRadians(degrees.Value) : null;

        /// <summary>
        /// 将弧度标准化到 [-π, π] 范围
        /// </summary>
        public static double NormalizeRadians(double radians)
        {
            var result = radians % (2 * Math.PI);
            if (result > Math.PI) result -= 2 * Math.PI;
            else if (result < -Math.PI) result += 2 * Math.PI;
            return result;
        }

        /// <summary>
        /// 将角度标准化到 [-180, 180] 范围
        /// </summary>
        public static double NormalizeDegrees(double degrees)
        {
            var result = degrees % 360.0;
            if (result > 180.0) result -= 360.0;
            else if (result < -180.0) result += 360.0;
            return result;
        }
    }
}