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

【Iced】core库Size 结构体源码解析(size.rs)

这是iced_core中定义的2D尺寸类型用于表示宽度和高度。️ 结构体定义/// 2维空间中的尺寸大小#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]pubstructSizeTf32{/// 宽度pubwidth:T,/// 高度pubheight:T,}关键特性属性说明T f32默认使用f32类型Debug支持格式化调试输出Clone, Copy支持复制栈上拷贝PartialEq, Eq支持相等性比较Hash支持作为哈希键Default支持默认值0, 0️ 泛型构造函数implTSizeT{/// 创建新的Sizepubconstfnnew(width:T,height:T)-Self{Size{width,height}}} 常量定义f32版本implSize{/// 零尺寸 (0, 0)pubconstZERO:SizeSize::new(0.,0.);/// 单位尺寸 (1, 1)pubconstUNIT:SizeSize::new(1.,1.);/// 无限尺寸 (∞, ∞)pubconstINFINITE:SizeSize::new(f32::INFINITY,f32::INFINITY);} 核心方法1.min/max - 分量比较/// 返回两个尺寸每个分量的最小值pubfnmin(self,other:Self)-Self{Size{width:self.width.min(other.width),height:self.height.min(other.height),}}/// 返回两个尺寸每个分量的最大值pubfnmax(self,other:Self)-Self{Size{width:self.width.max(other.width),height:self.height.max(other.height),}}示例letaSize::new(10,20);letbSize::new(15,5);letmina.min(b);// Size { width: 10, height: 5 }letmaxa.max(b);// Size { width: 15, height: 20 }2.expand - 扩展尺寸/// 扩展当前尺寸pubfnexpand(self,other:implIntoSize)-Self{letotherother.into();Size{width:self.widthother.width,height:self.heightother.height,}}示例letsizeSize::new(100,100);letexpandedsize.expand(Size::new(20,30));// (120, 130)3.rotate - 旋转变换/// 旋转尺寸返回包含旋转后尺寸的最小矩形pubfnrotate(self,rotation:Radians)-Size{letradiansf32::from(rotation);Size{width:(self.width*radians.cos()).abs()(self.height*radians.sin()).abs(),height:(self.width*radians.sin()).abs()(self.height*radians.cos()).abs(),}}数学原理旋转矩形后的外接矩形尺寸计算示例letsizeSize::new(100,50);letrotatedsize.rotate(Radians::from(45.0_f32.to_radians()));// 计算旋转45度后的外接矩形尺寸4.ratio - 宽高比约束/// 应用宽高比约束不超过原尺寸pubconstfnratio(self,aspect_ratio:f32)-Size{Size{width:(self.height*aspect_ratio).min(self.width),height:(self.width/aspect_ratio).min(self.height),}}用途在保持宽高比的同时确保尺寸不超过原始边界示例letcontainerSize::new(200,100);letimagecontainer.ratio(16.0/9.0);// 保持16:9宽高比// 结果尽可能大但不超过200x100 Length 特殊实现implSizeLength{/// 检查宽度或高度是否为0固定长度#[inline]pubfnis_void(self)-bool{matches!(self.width,Length::Fixed(0.0))||matches!(self.height,Length::Fixed(0.0))}}用途在布局系统中检查尺寸是否为空 类型转换从数组/元组创建implTFrom[T;2]forSizeT{fnfrom([width,height]:[T;2])-Self{Size{width,height}}}implTFrom(T,T)forSizeT{fnfrom((width,height):(T,T))-Self{Self{width,height}}}// 特殊从(u32, u32)到f32 SizeimplFrom(u32,u32)forSize{fnfrom((width,height):(u32,u32))-Self{Size::new(widthasf32,heightasf32)}}与Vector的转换implTFromVectorTforSizeT{fnfrom(vector:VectorT)-Self{Size{width:vector.x,height:vector.y,}}}implTFromSizeTforVectorT{fnfrom(size:SizeT)-Self{Vector::new(size.width,size.height)}}转换为数组implTFromSizeTfor[T;2]{fnfrom(size:SizeT)-Self{[size.width,size.height]}}➗ 数学运算1.加减运算implTstd::ops::AddforSizeTwhereT:std::ops::AddOutputT{typeOutputSizeT;fnadd(self,rhs:Self)-Self::Output{Size{width:self.widthrhs.width,height:self.heightrhs.height,}}}// 类似的Sub实现2.标量乘除implTstd::ops::MulTforSizeTwhereT:std::ops::MulOutputTCopy{typeOutputSizeT;fnmul(self,rhs:T)-Self::Output{Size{width:self.width*rhs,height:self.height*rhs,}}}// 类似的Div实现3.向量缩放implTstd::ops::MulVectorTforSizeTwhereT:std::ops::MulOutputTCopy{typeOutputSizeT;fnmul(self,scale:VectorT)-Self::Output{Size{width:self.width*scale.x,height:self.height*scale.y,}}}示例letsizeSize::new(100,200);letscaledsize*2.0;// (200, 400)letscaled_vecsize*Vector::new(2.0,0.5);// (200, 100) 功能总结功能类别操作示例构造new(),ZERO,UNIT,INFINITESize::new(100, 200)比较min(),max()size.min(other_size)变换expand(),rotate(),ratio()size.rotate(45°)检查is_void()size.is_void()转换From/Into 数组/元组/VectorSize::from([100, 200])运算,-,*,/size1 size2缩放* 标量,* Vectorsize * Vector::new(2, 3) 设计亮点泛型灵活- 支持任意数值类型默认f32常量完备- ZERO, UNIT, INFINITE 覆盖常见用例几何完备- 支持旋转、宽高比等高级操作类型互通- 与Vector无缝转换运算符重载- 直观的数学操作布局集成- 与Length类型配合用于UI布局这个Size类型是 Iced 布局系统和图形渲染的核心组件提供了丰富的尺寸操作功能

相关文章:

【Iced】core库Size 结构体源码解析(size.rs)

这是 iced_core 中定义的 2D尺寸 类型&#xff0c;用于表示宽度和高度。 &#x1f3d7;️ 结构体定义 /// 2维空间中的尺寸大小 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)] pub struct Size<T f32> {/// 宽度pub width: T,/// 高度pub height: T, }关…...

PMP自学笔记

...

【Matlab】MATLAB教程:多维数组索引(案例:A(1,2,3)、A(:,:,2),聚焦多维数据提取)

MATLAB教程:多维数组索引(案例:A(1,2,3)、A(:,:,2),聚焦多维数据提取) 在MATLAB科学计算、工程仿真、数据分析及数据可视化中,多维数组(三维及以上)是存储复杂关联数据的核心载体——无论是时间-空间-指标三维监测数据、多通道传感器数据,还是三维空间坐标数据,都需…...

视频去字幕工具横评:本地 AI、云端方案与传统方法的实战对比

> 做视频二创&#xff0c;最头疼的莫过于硬编码字幕。本文实测 5 种主流去字幕方案&#xff0c;从技术原理到实际效果&#xff0c;给你一份客观的选型指南。---## 一、为什么去字幕这么难&#xff1f;视频字幕分为两种&#xff1a;**软字幕**和**硬字幕**。- **软字幕**&…...

Infoseek:以智能舆情监测,为企业品牌筑牢安全防线

当前网络舆论场迭代速度快&#xff0c;一条负面评价、一次认知误解&#xff0c;均可能通过网络快速扩散&#xff0c;对企业品牌形象造成影响。传统舆情监测服务普遍存在成本偏高、操作门槛高的问题&#xff0c;导致多数中小企业陷入“事后补救”的被动局面。Infoseek舆情监测系…...

告别手动复制:C# + Spire.XLS 实现HTML转Excel的完整方案

告别手动复制&#xff1a;C# Spire.XLS 实现HTML转Excel的完整方案 在Web开发和数据处理中&#xff0c;C# HTML to Excel转换需求频现。网页表格数据手动复制到Excel常导致样式丢失、格式混乱&#xff0c;费时费力。随着Web爬取数据自动化趋势&#xff0c;高效实现HTML 到 XLS…...

做跨境电商和出国旅行必备:世界各国电压、频率、插座类型查询整理

平时做工具网站时&#xff0c;经常会遇到一些非常实用但又不太容易找到完整资料的小问题。 前段时间在整理电器相关资料时&#xff0c;我需要查询 **世界各国的电压、频率以及插座类型**。 原本以为这种信息网上很多&#xff0c;但实际查找之后发现&#xff1a; * 有的网站只…...

FastAPI + SQLAlchemy + SSH + Doris 生产连接问题技术复盘

FastAPI + SQLAlchemy + SSH + Doris 生产连接报错1045 本文内容在公众号免费阅读; 获取方式: 关注公众号 [李指导数据前沿],回复关键词 “FastApi隧道” 即可获取本文配套的完整源代码文件及高清晰度系统架构图,助你少踩坑,直接起飞! 背景: 将 FastAPI 项目拉到本地,在…...

基于Spring Boot的高校学生心理健康管理系统设计与实现

目录 需求分析与功能模块设计技术选型与架构设计数据库设计关键功能实现安全与隐私保护测试与部署扩展性考虑 项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 需求分析与功能模块设计 明确系统核心需…...

强化学习实践:Q-learning算法在游戏AI中的训练过程

强化学习实践&#xff1a;Q-learning算法在游戏AI中的训练过程 在人工智能领域&#xff0c;强化学习因其独特的“试错”机制成为游戏AI开发的重要工具。其中&#xff0c;Q-learning作为一种经典的无模型强化学习算法&#xff0c;因其简单高效的特点&#xff0c;被广泛应用于游…...

普通人也能上手的 GoViewPro 平台,输入描述 AI 一键生成大屏神器

家人们&#xff0c;今天我必须要给大家安利这个超绝的 GoViewPro 平台&#xff01;你是不是常常为制作大屏而烦恼&#xff0c;觉得过程繁琐又复杂&#xff1f;但是&#xff01;有了 GoViewPro&#xff0c;一切都变得超简单。 点击前往 GoViewPro 地址查看&#x1f448;&#xf…...

IDEA中如何使用注释模版(创建类时自动带上注释)

打开IDEA中设置可以参考我的模版&#xff1a;/*** Author: ${USER}* Date: ${DATE} ${TIME}* Description: TODO*/...

(9-3)多模态融合理论与方法:高层融合

9.3 高层融合高层融合位于多模态感知与系统控制的最上层&#xff0c;其核心目标不是对原始数据或中间状态进行联合估计&#xff0c;而是基于多模态信息形成统一的认知结果与决策输出。在这一层级中&#xff0c;多模态信息通常以语义、任务状态、风险评估或策略建议的形式参与融…...

现代Qt QWidget界面美化与用户体验提升深度技术报告

现代Qt QWidget界面美化与用户体验提升深度技术报告 在当今软件工程领域&#xff0c;桌面应用程序的视觉美学与交互质感已成为产品核心竞争力的重要组成部分。Qt框架凭借其卓越的跨平台能力与深厚的底层沉淀&#xff0c;始终是工业软件、工程工具及企业级应用的首选。然而&…...

vscode运行开发uniapp项目

1. 环境准备 安装 Node.js 确保已安装 Node.js&#xff08;建议使用 LTS 版本&#xff09;。下载地址&#xff1a;Node.js 官网。安装 VSCode 下载并安装最新版 VSCode&#xff1a;VSCode 官网。安装 HBuilderX&#xff08;可选但推荐&#xff09; UniApp 官方推荐使用 HBuild…...

【Iced】core库Vector 结构体源码解析(vector.rs)

这是 iced_core 中定义的 2D向量 类型&#xff0c;用于表示位移、方向、速度等具有大小和方向的量。 &#x1f3d7;️ 结构体定义 /// 2D向量 #[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] pub struct Vector<T f32> {/// X分量pub x: T,/// Y分量pub y: T, …...

政务与金融机构数据交换“生死线”:用对网闸,杜绝“网络泄密”

在政务、金融等核心领域&#xff0c;网络如同“血管”&#xff0c;数据则是“血液”。既要保证“血液”在内外网间安全流动&#xff0c;又要严防“生命核心”被反向侵入&#xff0c;是信息安全建设的顶级难题。今天&#xff0c;我们就来拆解一个关键设备——网闸&#xff0c;看…...

保姆级教程:如何 5 分钟领养一只“龙虾”?

还在为飞书消息回复不过来而烦恼吗&#xff1f;想不想给团队引入一个能秒回信息、自动查数据、发通知的 AI 助手&#xff1f;没问题&#xff0c;今天我们就带你实现&#xff01;只需5分钟&#xff0c;在云端部署 ArkClaw 并接入飞书&#xff0c;就能把它变成你团队里 7x24 小时…...

U盘插入电脑没反应?亲测有效解决方法,新手零门槛搞定

相信很多朋友都遇到过这种情况&#xff0c;U盘插入电脑没反应&#xff0c;不知道是U盘坏了&#xff0c;还是电脑出了问题&#xff0c;生怕里面的资料丢失&#xff0c;只能到处找办法&#xff0c;甚至花钱找维修&#xff0c;既耽误时间又浪费钱。其实不用慌&#xff0c;U盘插入没…...

【实时Linux工业PLC解决方案系列】第三十一篇 - 实时Linux PLC容器化部署实践

一、简介&#xff1a;为什么PLC需要容器化&#xff1f;传统痛点&#xff1a;产线换型时&#xff0c;PLC程序需逐台烧录&#xff0c;停机2小时起。不同项目依赖冲突&#xff08;库版本、内核模块&#xff09;&#xff0c;"这台能跑&#xff0c;那台报错"。现场调试出差…...

全球企业动画制作市场运作商机研究报告

2026-2032年全球企业动画制作市场运作商机研究报告 【出版时间】&#xff1a;【2026.3月】 【出版机构】&#xff1a;【智信中科研究网】 【内容省略&#xff0c;详见官网内容】 1 行业定义 1.1 企业动画制作定义 1.2 行业分类 1.2.1 按产品类型分类 1.2.2 按内容分类 1.2.3 按…...

SQL注入 基于报错的回显分析

在URL中修改对应的ID值&#xff0c;数值型&#xff0c;字符型等等字符型&#xff1a;修改id值为1’&#xff0c;查看报错回显如图&#xff0c;1没有被执行&#xff0c;字符错误&#xff0c;则对应的SQL语句为&#xff1a;select * from User where id"$id" limit 0,1…...

angular问题及解决

1.问题&#xff1a; 列表点击进入一个详情页面&#xff0c;div的显示隐藏控制的&#xff0c;此详情页面有附件列表&#xff0c;当点第一个的时候正常显示的附件&#xff0c;当点第二个的时候&#xff0c;接口返回的是正确的&#xff0c;但是页面还是显示的第一个 考虑得需要强制…...

论文全流程规范化指南:从选题到定稿的学术逻辑拆解

在学术深造的道路上&#xff0c;论文写作是无法绕开的核心关卡。无论是本科毕业论文、硕士学位论文&#xff0c;还是博士阶段的期刊小论文&#xff0c;其本质都是一项严谨的学术研究。许多同学并非学术能力不足&#xff0c;而是缺乏对论文写作规范与逻辑的系统性认知。本文将从…...

DnsJumper:网页加速神器

软件获取地址 网络故障修复工具合集 有时候&#xff0c;你网络测速速度并不低&#xff0c;但打开网页加载却慢如蜗牛&#xff0c;这是由于你DNS解析过慢导致&#xff0c;今天给大家带来一款DNS切换神器DnsJumper&#xff0c;内置几十个最快的DNS&#xff0c;可以一键应用。 软…...

IAR扩展嵌入式开发平台,推出面向安全关键型应用的长期支持(LTS)服务

IAR今日宣布&#xff0c;对其嵌入式开发平台进行扩展&#xff0c;推出全新长期支持&#xff08;Long-Term Support&#xff0c;LTS&#xff09;服务&#xff0c;旨在帮助客户在漫长的产品生命周期中&#xff0c;维持稳定、可复现的工具链。 在汽车、工业自动化、医疗等安全关键…...

收藏!90天打造你的AI同事:从0到1落地AI Agent实战清单

把 AI 变成“同事”&#xff0c;不是插件&#xff1a;一份可落地的 AI Agent 路线图 从工厂车间的智能排产&#xff0c;到办公室里能自主决策的智能体&#xff0c;越来越多企业正在经历一场跃迁&#xff1a;从“数字化”进阶到“智能化”。但现实也很一致: 投入不小&#xff0c…...

高效集成的DCIM管理系统引领数据中心智能化管理革命

高效集成的DCIM管理系统正在重新定义数据中心的管理方式。通过优化各项资源配置&#xff0c;该系统可以有效整合不同管理模块&#xff0c;实现信息的实时传递和处理。这不仅提高了数据中心的整体运行效率&#xff0c;还大幅提升了安全性。系统内置环境监控功能&#xff0c;能够…...

【回溯算法——N皇后】

本次复习的是回溯算法中的一道经典问题——N皇后问题&#xff0c;对应leetcode 51.N皇后 内容来源于代码随想录 题目描述 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&…...

Python面向对象编程(OOP)详解:类、对象、继承、多态、封装

面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称OOP&#xff09;是一种主流的编程范式&#xff0c;核心思想是“以对象为中心”&#xff0c;将数据&#xff08;属性&#xff09;和操作数据的方法&#xff08;行为&#xff09;封装在一起&#xff0c;通过…...