【quantity】7 角度单位模块(angle.rs)
代码定义了一个用于处理不同角度单位的Rust模块,支持弧度(radians)、度(degrees)和哥恩(gradians/gons)之间的转换,以及带SI前缀的弧度单位(如毫弧度、微弧度)。
主要组成部分
- 类型定义
通用角度类型
-
Angle<V, P = NoPrefix>: 带SI前缀的通用弧度角度类型
-
V: 值类型(f32, f64等)
-
P: SI前缀类型(无前缀、毫、微等)
-
具体角度类型
-
Radians: 弧度(无前缀)
-
Milliradians: 毫弧度(10^-3弧度)
-
Microradians: 微弧度(10^-6弧度)
-
Degrees: 度(°)
-
Gradians: 哥恩(百分度)
- 结构体实现
Degrees和Gradians结构体
-
都实现了new()构造函数和into_inner()解构方法
-
通过derive宏自动实现了:
-
Debug, Clone, Copy, PartialEq
-
Add, Sub, AddAssign, SubAssign (加减运算)
-
- 转换实现
主要转换关系: - 度 ↔ 弧度
-
公式: rad = deg × (π/180)
-
公式: deg = rad × (180/π)
- 哥恩 ↔ 弧度
-
公式: rad = gon × (π/200)
-
公式: gon = rad × (200/π)
- 度 ↔ 哥恩
-
公式: gon = deg × (10/9)
-
公式: deg = gon × (9/10)
- 毫弧度/微弧度 ↔ 弧度
- 简单的前缀转换(1000倍或1,000,000倍关系)
- 单元测试
包含了对各种角度类型和转换的测试用例:
-
构造函数测试
-
基本转换测试
-
往返转换测试(确保转换的对称性)
-
算术运算测试
使用示例
// 创建角度值
let degrees = Degrees::new(180.0);
let radians: Radians<f64> = degrees.into(); // 转换为弧度
assert_eq!(radians.into_inner(), std::f64::consts::PI);// 哥恩转换
let gradians = Gradians::new(200.0);
let radians: Radians<f64> = gradians.into();
assert_eq!(radians.into_inner(), std::f64::consts::PI);// 毫弧度
let mrad = Milliradians::new(1000.0);
let rad: Radians<f64> = mrad.into();
assert_eq!(rad.into_inner(), 1.0);
这个模块提供了类型安全的角度单位表示和转换,适合需要精确角度计算的科学和工程应用。