当前位置: 首页 > web >正文

【quantity】7 角度单位模块(angle.rs)

代码定义了一个用于处理不同角度单位的Rust模块,支持弧度(radians)、度(degrees)和哥恩(gradians/gons)之间的转换,以及带SI前缀的弧度单位(如毫弧度、微弧度)。

主要组成部分

  1. 类型定义
    通用角度类型
  • Angle<V, P = NoPrefix>: 带SI前缀的通用弧度角度类型

    • V: 值类型(f32, f64等)

    • P: SI前缀类型(无前缀、毫、微等)

具体角度类型

  • Radians: 弧度(无前缀)

  • Milliradians: 毫弧度(10^-3弧度)

  • Microradians: 微弧度(10^-6弧度)

  • Degrees: 度(°)

  • Gradians: 哥恩(百分度)

  1. 结构体实现
    Degrees和Gradians结构体
  • 都实现了new()构造函数和into_inner()解构方法

  • 通过derive宏自动实现了:

    • Debug, Clone, Copy, PartialEq

    • Add, Sub, AddAssign, SubAssign (加减运算)

  1. 转换实现
    主要转换关系:
  2. 度 ↔ 弧度
  • 公式: rad = deg × (π/180)

  • 公式: deg = rad × (180/π)

  1. 哥恩 ↔ 弧度
  • 公式: rad = gon × (π/200)

  • 公式: gon = rad × (200/π)

  1. 度 ↔ 哥恩
  • 公式: gon = deg × (10/9)

  • 公式: deg = gon × (9/10)

  1. 毫弧度/微弧度 ↔ 弧度
  • 简单的前缀转换(1000倍或1,000,000倍关系)
  1. 单元测试
    包含了对各种角度类型和转换的测试用例:
  • 构造函数测试

  • 基本转换测试

  • 往返转换测试(确保转换的对称性)

  • 算术运算测试

使用示例

// 创建角度值
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);

这个模块提供了类型安全的角度单位表示和转换,适合需要精确角度计算的科学和工程应用。

http://www.xdnf.cn/news/3665.html

相关文章:

  • 电脑RGB888P转换为JPEG方案 ,K230的RGB888P转换为JPEG方案
  • CGI(Common Gateway Interface)协议详解
  • 【AI面试准备】TensorFlow与PyTorch构建缺陷预测模型
  • AtCoder AT_abc404_g [ABC404G] Specified Range Sums
  • ​​信息泄露:网站敏感文件泄漏的隐形危机与防御之道​
  • 前端面试每日三题 - Day 23
  • 泰迪杯特等奖案例学习资料:基于时空图卷积网络的城市排水系统水位精准重建与异常检测
  • Power Query精通指南2:数据转换——透视/逆透视/分组、横向纵向合并数据、条件判断、处理日期时间
  • 如何设计抗Crosstalk能力强的PCB镀穿孔
  • Linux 进程间通信(IPC)详解
  • 【计算机视觉】目标检测:yoloV1~yoloV11项目论文及对比
  • 【信息系统项目管理师-论文真题】2011上半年论文详解(包括解题思路和写作要点)
  • LVGL -文本显示 英文、中文
  • MaC QT 槽函数和Lambda表达式
  • Leetcode刷题记录29——矩阵置零
  • 【JavaScript】性能优化:打造高效前端应用
  • 数据赋能(212)——质量管理——统一性原则
  • ROS2学习笔记|实现订阅消息并朗读的详细步骤
  • Easy云盘总结篇-登录注册
  • C# 编程核心:控制流与方法调用详解
  • 力扣每日一题 ​838. 推多米诺​
  • PyCharm中全局搜索无效
  • 软件测试名词科普:驱动模块、桩模块
  • springAop代理责任链模式源码解析
  • Socket-TCP
  • 【信息系统项目管理师】【2017年-2024年】计算画图题汇总——案例分析
  • [更新完毕]2025东三省B题深圳杯B题数学建模挑战赛数模思路代码文章教学:LED显示屏颜色转换设计与校正
  • ES6入门---第二单元 模块三:对象新增、
  • 深入理解 HttpExchange_Java 中构建 HTTP 服务的基础组件
  • 0基础 | STM32 | TB6612电机驱动使用