AngleConverter.cs
2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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) => Math.Round(radians * (180.0 / Math.PI));
/// <summary>
/// 角度转弧度(支持多圈,保留完整圈数信息,精确到6位小数)
/// </summary>
/// <param name="degrees">角度值</param>
/// <returns>弧度值(6位小数)</returns>
public static double ToRadians(double degrees) => Math.Round(degrees * (Math.PI / 180.0), 6);
/// <summary>
/// 弧度转角度(可空类型)
/// </summary>
public static double? ToCycleDegrees(double? radians) => radians.HasValue ? NormalizeDegrees(ToDegrees(radians.Value)) : null;
/// <summary>
/// 角度转弧度(可空类型)
/// </summary>
public static double? ToCycleRadians(double? degrees) => degrees.HasValue ? NormalizeRadians(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;
}
}
}