【Iced】core库下angle.rs文件分析

rust 复制代码
use crate::{Point, Rectangle, Vector};

use std::f32::consts::{FRAC_PI_2, PI};
use std::fmt::Display;
use std::ops::{Add, AddAssign, Div, Mul, RangeInclusive, Rem, Sub, SubAssign};

这段代码定义了两个用于表示角度的新类型包装结构体Degrees(度)和 Radians(弧度)。下面详细解释每个部分:

📦 导入部分

  • PointRectangleVector - 可能来自其他模块的几何图元
  • FRAC_PI_2(π/2)和 PI - 来自 std::f32::consts 的数学常数
  • 各种运算符 trait(AddMul 等)- 用于重载运算符
  • RangeInclusive - 用于定义范围
  • Display - 用于字符串格式化

📐 Degrees 结构体

一个元组结构体 ,包装了一个 f32 来表示以度为单位的角度

✨ 主要特性:

  • 常量RANGE 定义了有效的度数值范围(0 到 360)
  • 转换 :可以从/转换为 f32u8f64num_traits::FromPrimitive
  • 比较 :实现了与 Degrees 和原始 f32 的部分相等和排序比较
  • 运算 :实现了与 f32 的乘法(角度缩放)

📐 Radians 结构体

一个元组结构体 ,包装了一个 f32 来表示以弧度为单位的角度

✨ 主要特性:

  • 常量
    • RANGE:0 到 2π(整个圆)
    • PI:π 弧度(180 度)

🔍 几何方法:

rust 复制代码
fn to_distance(&self, bounds: &Rectangle) -> (Point, Point)
  • 计算从矩形中心出发、按此角度延伸到矩形边界的直线
  • 用于绘制从中心到边缘、特定角度的射线/直线
  • 使用带有正弦/余弦的向量数学来找到交点

🔄 转换:

  • DegreesRadians(乘以 π/180)
  • 从/到 f32u8f64num_traits::FromPrimitive 的转换

➕ 运算符重载(针对 Radians):

  • AddAddAssignSubSubAssign - 基本算术运算
  • Mul - 可以乘以两个弧度,或者弧度乘以 f32
  • Div - 除法运算
  • Rem - 余数/取模运算
  • Degrees 的混合运算(可以将度加到弧度上)

⚖️ 类型比较:

  • 实现了与 Radians 和原始 f32 的部分相等和排序比较

📝 显示:

  • 格式化为 "X rad" 的字符串输出

🎯 设计模式

这使用了新类型模式,目的是:

  1. 类型安全 - 防止意外混淆度和弧度
  2. 领域特定方法 - 添加角度相关的实用方法
  3. 控制运算 - 只允许有意义的数学运算
  4. 定制行为 - 实现与基础类型不同的行为

这段代码很可能是图形或几何库的一部分,在这些库中,精确的角度处理对于旋转、射线投射或形状操作等计算非常重要。

相关推荐
MC皮蛋侠客6 小时前
Tauri 2.x 系列(八):与其他语言结合——Sidecar、服务、FFI 与插件的选择
rust·tauri
MC皮蛋侠客7 小时前
Tauri 2.x 系列(五):调用系统 API——官方插件、Rust crate 与原生能力
开发语言·后端·rust
磐链科技12 小时前
钱包开发中的跨平台架构:Flutter与Rust构建高性能移动端钱包
flutter·架构·rust
MC皮蛋侠客14 小时前
Tauri 2.x 系列(四):窗口、菜单、托盘与应用生命周期——做出真正的桌面体验
rust·tauri
MC皮蛋侠客14 小时前
Tauri 2.x 系列(一):架构全景与最小闭环——从 WebView 到 EMS 后台
架构·rust·tauri
今天AI了吗17 小时前
从“金鱼脑”到“大象记忆”:AI Agent 短期记忆与长期记忆的存储与检索全解
数据库·人工智能·python·sql·rust
MC皮蛋侠客17 小时前
Tauri 2.x 系列(二):项目结构与前端框架——Vue、React 如何成为桌面前台
rust·tauri
@atweiwei2 天前
用 Rust 构建 Agent 应用的高性能框架:langchainrust 架构全景
人工智能·架构·rust·langchain·llm·agent·ai编程
Source.Liu2 天前
【Dioxus】Dioxus CLI (dx) 命令笔记
笔记·rust·dioxus