【unitrix】 4.12 通用2D仿射變換矩陣(matrix/types.rs)

一、源碼

這段代碼定義了一個通用的2D仿射變換矩陣結構,可用于表示二維空間中的各種線性變換。

/// 通用2D仿射變換矩陣(元素僅需實現Copy trait)
///
/// 該矩陣可用于表示二維空間中的任意仿射變換,支持以下應用場景:
/// 1. 平面幾何轉換(平移/旋轉/縮放/剪切)
/// 2. 顏色空間線性變換(如RGB到YUV轉換)
/// 3. 帶物理單位的量值轉換(如像素到毫米的映射)
/// 4. 動畫系統中的插值變換
///
/// 矩陣數學表示:
/// ┌           ┐
/// │ xx  xy  x │
/// │ yx  yy  y │
/// │ 0   0   1 │
/// └           ┘
///
/// 字段說明:
/// - x, y:  平移分量(translation),支持:
///   * 基本標量(f32/f64)
///   * 帶單位的量(如Length<T>)
///   * 動態變量(Var<T>)
///
/// - xx, xy, yx, yy: 線性變換分量,支持:
///   * 類型常量(編譯時確定的轉換因子)
///   * 運行時變量(通過Var<T>包裝)
///   * 單位化量(如角度、比例系數等)
///
/// 特性:
/// - 輕量:所有字段只需實現Copy trait
/// - 類型安全:支持泛型參數指定不同計算精度
/// - 可組合:可通過矩陣乘法組合多個變換
///
/// 示例:
/// ```
/// // 創建平移矩陣
/// let translate = Matrix::new(10.0, 20.0, 1.0, 0.0, 0.0, 1.0);
///
/// // 創建縮放矩陣
/// let scale = Matrix::new(0.0, 0.0, 2.0, 0.0, 0.0, 3.0);
///
/// // 組合變換(先縮放后平移)
/// let transform = translate * scale;
/// ```
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct Matrix<X, Y, Xx, Xy, Yx, Yy> {/// 水平平移分量pub x: X,/// 垂直平移分量pub y: Y,/// 水平軸向縮放和X到X的變換因子pub xx: Xx,/// X到Y軸的剪切/旋轉因子pub xy: Xy,/// Y到X軸的剪切/旋轉因子pub yx: Yx,/// 垂直軸向縮放和Y到Y的變換因子pub yy: Yy,
}impl<X, Y, Xx, Xy, Yx, Yy> Matrix<X, Y, Xx, Xy, Yx, Yy> {/// 構造一個新的2D仿射變換矩陣////// # 參數/// - `x`: 水平平移分量/// - `y`: 垂直平移分量/// - `xx`: X軸縮放和X到X變換因子/// - `xy`: X到Y軸的剪切/旋轉因子/// - `yx`: Y到X軸的剪切/旋轉因子/// - `yy`: Y軸縮放和Y到Y變換因子////// # 返回值/// 返回構建的2D仿射變換矩陣////// # 示例/// ```/// let identity = Matrix::new(0.0, 0.0, 1.0, 0.0, 0.0, 1.0);  // 單位矩陣/// let translated = Matrix::new(10.0, 20.0, 1.0, 0.0, 0.0, 1.0);  // 平移矩陣/// ```pub fn new(x: X, y: Y, xx: Xx, xy: Xy, yx: Yx, yy: Yy) -> Self {Self { x, y, xx, xy, yx, yy }}
}

二、結構體定義

pub struct Matrix<X, Y, Xx, Xy, Yx, Yy> {pub x: X,    // 水平平移分量pub y: Y,    // 垂直平移分量pub xx: Xx,  // X軸縮放和X到X變換因子pub xy: Xy,  // X到Y軸的剪切/旋轉因子pub yx: Yx,  // Y到X軸的剪切/旋轉因子pub yy: Yy   // Y軸縮放和Y到Y變換因子
}

這是一個泛型結構體,使用6個類型參數分別表示矩陣的不同分量。這種設計使得矩陣可以支持不同類型的值(如f32/f64、帶單位的量、動態變量等)。

三、數學表示

矩陣表示2D仿射變換,數學形式為:
[ x x x y x y x y y y 0 0 1 ] \begin{bmatrix}xx & xy & x \\ yx & yy & y \\ 0 & 0 & 1 \end{bmatrix} ???xxyx0?xyyy0?xy1????

這是一個3x3的齊次坐標矩陣,用于表示二維空間中的各種線性變換。

四、特性

  1. 支持多種變換:
  • 平移(通過x, y分量)

  • 旋轉/縮放/剪切(通過xx, xy, yx, yy分量)

  1. 泛型設計:
  • 支持不同類型的分量值

  • 類型安全,編譯時檢查

  1. 輕量級:
  • 所有字段只需實現Copy trait

  • 結構體本身也實現了Copy

  1. 可組合性:
  • 可以通過矩陣乘法組合多個變換

五、應用場景

  1. 平面幾何轉換(平移/旋轉/縮放/剪切)

  2. 顏色空間線性變換(如RGB到YUV轉換)

  3. 帶物理單位的量值轉換(如像素到毫米的映射)

  4. 動畫系統中的插值變換

六、構造函數


pub fn new(x: X, y: Y, xx: Xx, xy: Xy, yx: Yx, yy: Yy) -> Self

創建一個新的2D仿射變換矩陣,參數對應矩陣的各個分量。

七、示例用法


// 創建平移矩陣
let translate = Matrix::new(10.0, 20.0, 1.0, 0.0, 0.0, 1.0);// 創建縮放矩陣
let scale = Matrix::new(0.0, 0.0, 2.0, 0.0, 0.0, 3.0);// 組合變換(先縮放后平移)
let transform = translate * scale;

這個設計提供了靈活且類型安全的2D變換表示,適用于各種圖形和計算場景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87210.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87210.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87210.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android RecyclerView隱藏整個Item后,該Item還占位留白問題

前言 android RecyclerView隱藏整個Item后,該Item還占位留白問題 思考了利用隱藏和現實來控制item 結果實現不了方案 解決方案 要依據 model 的第三個參數&#xff08;布爾值&#xff09;決定是否保留數據&#xff0c;可以通過 ?filter 高階函數結合 ?空安全操作符? 實…

地圖瓦片介紹與地圖瓦片編程下載

前沿 地圖瓦片指將一定范圍內的地圖按照一定的尺寸和格式&#xff0c;按縮放級別或者比例尺&#xff0c;切成若干行和列的正方形柵格圖片&#xff0c;對切片后的正方形柵格圖片被形象的稱為瓦片[。瓦片通常應用于B/S軟件架構下&#xff0c;瀏覽器從服務器獲取地圖數據&#xf…

手機屏亮點缺陷修復及相關液晶線路激光修復原理

摘要 手機屏亮點缺陷嚴重影響顯示品質&#xff0c;液晶線路短路、電壓異常是導致亮點的關鍵因素。激光修復技術憑借高能量密度與精準操控性&#xff0c;可有效修復液晶線路故障&#xff0c;消除亮點缺陷。本文分析亮點缺陷成因&#xff0c;深入探究液晶線路激光修復原理、工藝…

MySQL數據一鍵同步至ClickHouse數據庫

隨著數據量的爆炸式增長和業務場景的多樣化&#xff0c;傳統數據庫系統如MySQL雖然穩定可靠&#xff0c;但在海量數據分析場景下逐漸顯露出性能瓶頸。這時&#xff0c;ClickHouse憑借其列式存儲架構和卓越的OLAP&#xff08;在線分析處理&#xff09;能力脫穎而出&#xff0c;成…

Android中Compose常用組件以及布局使用方法

一、基礎控件詳解 1. Text - 文本控件 Text(text "Hello Compose", // 必填&#xff0c;顯示文本color Color.Blue, // 文字顏色fontSize 24.sp, // 字體大小&#xff08;注意使用.sp單位&#xff09;fontStyle FontStyle.Italic, // 字體樣式&…

SCI一區黑翅鳶優化算法+三模型光伏功率預測對比!BKA-CNN-GRU、CNN-GRU、GRU三模型多變量時間序列預測

SCI一區黑翅鳶優化算法三模型光伏功率預測對比&#xff01;BKA-CNN-GRU、CNN-GRU、GRU三模型多變量時間序列預測 目錄 SCI一區黑翅鳶優化算法三模型光伏功率預測對比&#xff01;BKA-CNN-GRU、CNN-GRU、GRU三模型多變量時間序列預測效果一覽基本介紹程序設計參考資料 效果一覽 …

創客匠人視角:創始人 IP 打造為何成為知識變現的核心競爭力

在互聯網流量成本高企的當下&#xff0c;知識變現行業正經歷從 “產品競爭” 到 “IP 競爭” 的范式遷移。創客匠人 CEO 老蔣指出&#xff0c;創始人 IP 已成為企業突破增長瓶頸的關鍵支點 —— 美特斯邦威創始人周成建首次直播即創下 1500 萬元成交額&#xff0c;印證了創始人…

類圖+案例+代碼詳解:軟件設計模式----生成器模式(建造者模式)

生成器模式&#xff08;建造者模式&#xff09; 把復雜對象的建造過程和表示分離&#xff0c;讓同樣的建造過程可以創建不同的表示。 假設你去快餐店買漢堡&#xff0c;漢堡由面包、肉餅、蔬菜、醬料等部分組成。 建造者模式的角色類比&#xff1a; 產品&#xff08;Product…

UI前端與數字孿生融合探索:為智慧物流提供可視化解決方案

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在全球供應鏈數字化轉型的浪潮中&#xff0c;智慧物流正從概念走向落地 —— 據 MarketsandMa…

遠程辦公與協作新趨勢:從遠程桌面、VDI到邊緣計算,打造高效、安全的混合辦公環境

一、引言 隨著數字化轉型的加速&#xff0c;越來越多的企業開始采用遠程辦公和混合辦公模式&#xff0c;以提升員工的靈活性和企業的敏捷性。然而&#xff0c;異地辦公也帶來了諸如桌面環境不一致、安全風險增加、溝通協作效率降低等諸多挑戰。因此&#xff0c;如何打造一致、…

算法總結篇:二叉樹

二叉樹解題整體框架&#xff1a; 1、確定當前題型是做高度還是深度還是搜索樹還是其他 高度&#xff08;從下往上&#xff0c;求根深度、高度等&#xff09;&#xff1a; 使用后序遍歷會更加簡單&#xff0c;遞歸方法一般需要返回值返回上級&#xff0c;讓上級對返回值進行判斷…

【Elasticsearch】most_fields、best_fields、cross_fields 的區別與用法

most_fields、best_fields、cross_fields 的區別與用法 1.核心區別概述2.詳細解析與用法2.1 best_fields&#xff08;最佳字段匹配&#xff09;2.2 most_fields&#xff08;多字段匹配&#xff09;2.3 cross_fields&#xff08;跨字段匹配&#xff09; 3.對比案例3.1 使用 best…

力扣網C語言編程題:在數組中查找目標值位置之暴力解法

一. 簡介 本文記錄一下力扣網上涉及數組的問題&#xff1a;排序數組中查找目標值的位置。主要以C語言實現。 二. 力扣網C語言編程題&#xff1a;在數組中查找目標值位置 題目&#xff1a;在排序數組中查找元素的第一個和最后一個位置 給你一個按照非遞減順序排列的整數數組 …

OSCP - Proving Grounds - tre

主要知識點 突破邊界的方法比較多樣觀察pspy64的檢測結果 具體步驟 依舊nmap掃描開始,開放了80,8082,22端口 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-16 03:39 UTC Nmap scan report for 192.168.56.84 Host is up (0.00083s latency). Not shown: 65532 c…

【Mars3d】支持的basemaps數組與layers數組的坐標系列舉

問題場景&#xff1a; basemap 是epsg4326的。&#xff0c;layer 圖層是 epsg 4450的。可以在一個頁面中展示嗎&#xff1f; 回復&#xff1a; 可以不同坐標系疊加&#xff0c;但layer 圖層是 epsg 4450的只支持arcgis動態服務&#xff0c;其他情況的不支持 wmts只支持3個坐標…

【算法】509. 斐波那契數

509. 斐波那契數 簡單 相關標簽 premium lock icon 相關企業 斐波那契數 &#xff08;通常用 F(n) 表示&#xff09;形成的序列稱為 斐波那契數列 。該數列由 0 和 1 開始&#xff0c;后面的每一項數字都是前面兩項數字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 …

FOC學習筆記(5)內嵌式電機與表貼式電機的區別

1. 引言 在現代電機設計中&#xff0c;永磁同步電機&#xff08;Permanent Magnet Synchronous Motor, PMSM&#xff09;因其高效率、高功率密度和優異的動態性能&#xff0c;在工業、新能源汽車、航空航天等領域得到廣泛應用。根據永磁體在轉子中的安裝方式不同&#xff0c;永…

算法 按位運算

按位與&#xff08;Bitwise AND&#xff09;和按位異或&#xff08;Bitwise XOR&#xff09; 按位與&#xff08;&&#xff09; 按位與是對兩個數的二進制表示的每一位進行邏輯與操作。 規則&#xff1a;兩個對應位都為1時&#xff0c;結果位才為1&#xff0c;否則為0。…

python3GUI--基于PyQt5+SQLite3的網址審核系統(詳細圖文)

文章目錄 一&#xff0e;前言二&#xff0e;相關知識1.PyQt52.sqlite3 三&#xff0e;效果預覽1.登錄2.注冊3.普通用戶身份權限4.管理員身份權限 三、技術討論1.數據展示表格1. 更強的表現力和交互性&#xff08;前端功能豐富&#xff09;2. 數據處理效率更高&#xff08;支持大…

與后端現場聯調mock數據

當我們后端在現場沒辦法連后端本地就可以使用mock數據&#xff0c;模擬后端返回數據。使用工具&#xff1a;apifox 一、安裝好以后--新建接口 舉個栗子&#xff1a; 我想建個接口http://123.123.123.123:8080/api/login 二、 新建期望&#xff0c;返回固定值&#xff0c;否則…