UWP開發-二維變換以及三維變換

来源:http://www.cnblogs.com/Yixin-ran/archive/2016/11/22/6088654.html
-Advertisement-
Play Games

在開發中,由於某些需求,我們可能需要做一些平移,縮放,旋轉甚至三維變換,所以我來講講在UWP中這些變換的實現方法。 一、 二維變換: 二維變換用到的是RenderTransform a、TranslateTransform,平移: 屬性:X,Y我相信大家都知道怎麼用,這裡就不講廢話了 b、Rotat ...


在開發中,由於某些需求,我們可能需要做一些平移,縮放,旋轉甚至三維變換,所以我來講講在UWP中這些變換的實現方法。

一、

  二維變換:

 UIElement.RenderTransform

  a、TranslateTransform,平移:

    屬性:X,Y我相信大家都知道怎麼用,這裡就不講廢話了

  b、RotateTransform,旋轉:

    屬性:Angle

  c、ScaleTransform,縮放:

    屬性:ScaleX,ScaleY

  d、SkewTransform,扭曲:

    屬性:AngleX,AngleY

  e、MatrixTransform,矩陣變換

    Xmal用法:

<MatrixTransform Matrix="M11 M12 M21 M22 X Y">

    這個就稍微複雜一點,理論上可以做任何變換。說起來複雜,其實也就是一個變換矩陣而已

矩陣M:

M11 M12 0
M21 M22 0
  X   Y 1

我想,學過線性代數的應該都知道了吧,就是矩陣的乘法;假設點p0(x0,y0),則變換後的點為p1=[x0,y0,1]*M:

    x1 =  x0 * M11 + x0 * M21 + X ;

    y1 = y0 * M12 + y0 * M22 + Y;

  p1(x1,y1).

ps:矩陣的點乘簡單的說就是行*列相加,也就是說假如矩陣X點乘Y,則X的列數必須等於Y的行數。

額外的,如果需要同時做多種變換,UWP提供了兩種方法:

  1.TransformGroup,變換群組:

    

           <TransformGroup>
                    <RotateTransform />
                    <ScaleTransform />
                </TransformGroup>

因為在RenderTransform下只能有一個子元素,所以當需要同時用多種變換時需要一個TransfromGroup。

  2.CompositeTransform,複合變換:

    屬性:TranslateX,TranslateY,Rotate等

需要註意的是,變換是需要一個中心點的,這裡UWP提供了兩種設置中心點的方法:

  1.RenderTransformOrigin:

    這個屬性為需要變換的控制項的屬性而非RenderTransform的屬性,其值為Point(x,y).在控制項內的值為0-1,大於1時,變換中心將處於控制項外甚至佈局之外。

  2.CenterX,CenterY:

    設置絕對X軸和Y軸的值,這裡為絕對值而非相對值。

  建議使用前者。在大多數情況下,我們並不知道控制項的具體大小,而前者使用的是相對值所以無論是代碼量還是計算量都要優於後者。

二、

  三維變換:

 UIElement.Projection

  a、PlaneProjection

    屬性:CenterOfRotationX,CenterOfRotationY,CenterOfRotationZ; 旋轉的中心點 P(x,y,z)

         GlobalOffsetX,GlobalOffsetY,GlobalOffsetZ; 世界坐標系的平移

         LocalOffsetX,LocalOffsetY,LocalOffsetZ; 局部坐標系

         RotationX,RotationY,RotationZ; 分別繞X,Y,Z軸的旋轉角度

如果不明白為什麼有兩個坐標系,參照 《三維圖形系統中兩種坐標系之間的坐標變換

  b、Matrix3DProjection

    Xaml用法:

<Matrix3DProjection  ProjectionMatrix=    "M11,M12,M13, 0,
                                              M21,M22,M23, 0,
                                              M31,M32,M33, 0,
                                               X , Y , Z , 1"/>

 

    和上面二維矩陣變換類似,只是增加了一個維度而已:

矩陣M:

M11 M12 M13 0
M21 M22 M23 0
M31 M32 M33 0
X  Y Z 1


  設點 p0(x0,y0,z0),則變換後的點為:p1=[x0,y0,z0,1]*M

    x1=x0*M11+x0*M21+x0*M31+1*X;

    y1=y0*M12+y0*M22+Y0*M32+1*Y;

    z1=z0*M13+z0*M23+z0+M33+1*Z;

  p1(x1,y1,z1).

好了,基本講完了,如果你說矩陣部分還是沒看懂,我只能說你真的需要學習了。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • top 幾個磁碟fdisk -l 磁碟空間 df -lhdf -al 查看進程:ps -ef“grep java殺死進程:kill -9 進程號 more中過濾 more xxx |grep www.makaidong.com 安裝linux後配置ip Vim /etc/sysconfig/netw ...
  • 1.進入vi的命令 vi filename :打開或新建文件,並將游標置於第一行首 【新建文件】vi +n filename :打開文件,並將游標置於第n行首 【比如:某個shell報錯的行數時使用】vi + filename :打開文件,並將游標置於最後一行首 【追加功能】vi +/pattern ...
  • 命令是一種可執行文件,包括:關鍵字 參數。 1.顯示目錄中的文件 2.查詢工作目錄 3.改變文件許可權mask 4.以root身份執行命令 5.查看幫助 6.創建文件 7.複製文件 8.移動文件 9.刪除文件 10.創建目錄 11.刪除空目錄 12.改變文件訪問許可權 13.改變文件的擁有者 14.改變 ...
  • 新的2016MBP終於發佈了,作為把蘋果電腦裝WIN使用的人,等候很久之後,終於可以行動了。 1、之前的2013款Macbook Air 2013年之前一直用的是DELL電腦,由於DELL鍵盤左下角的Fn鍵在Ctrl鍵的右側,已經慣了多年,所以一直對於ThinkPad和Apple這樣Fn和Ctrl鍵... ...
  • spi子系統之驅動SSD1306 OLED 接觸Linux之前,曾以為讀源碼可以更快的學習軟體,於是前幾個博客都是一邊讀源碼一邊添加註釋,甚至精讀到每一行代碼,實際上效果並不理想,看過之後就忘記了。主要原因是沒理解透程式架構,各個模塊之間的關係,如何聯繫在一起,再加上沒有實例驗證。後來逐漸發現,理解 ...
  • 情況描述: 當安裝某些軟體後,磁碟根目錄中多出了msdia80.dll文件,該文件顯示為2006年12月1日,884KB。 原因: 當使用64位操作系統時,在電腦上安裝 Microsoft Visual C++ 2005 可再發行組件時, Msdia80.dll文件被安裝在啟動驅動器的根文件夾中。 ...
  • 【大型網站技術實踐】初級篇:藉助Nginx搭建反向代理伺服器(轉) 出處:http://edisonchou.cnblogs.com/ 一、反向代理:Web伺服器的“經紀人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理伺服器來接受internet上的連接請求,然後將 ...
  • seL4之hello 2旅途 2016/11/19 13:15:38 If you like my blog, please buy me a cup of coffee. 回顧上周 seL4運行環境搭建. 完成 的運行. 補充上周 1.微內核與巨集內核有什麼不同? 微內核——用戶態提供OS服務,一般 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...