計算機圖形學入門03:二維變換

????????變換(Transformation)可分為模型(Model)變換和視圖(Viewing)變換。在3D虛擬場景中相機的移動和旋轉,角色人物動畫都需要變換,用來描述物體運動。將三維世界投影變換到2D屏幕上成像出來,也需要變換。

?1.縮放變換

????????縮放(Scale)變換

? ? ? ? 如上圖所示,如果想把一個圖形縮小為原來的0.5倍,那么就需要x坐標變為0.5倍,y坐標也變為0.5倍,可以用以下表達式表示:

????????可以用矩陣的形式表示如下:

????????上面的矩陣表達式針對x軸和y軸進行相同比例的縮放,實際中兩個方向上的縮放可能不盡相同,這時只需要把矩陣表達式稍作修改即可:

????????Sx表示在x軸方向上縮放的倍數,Sy表示在y軸方向上縮放的倍數。

2.反射變換

? ? ? ? 反射(Reflection)變換也可稱為鏡像變換,如下圖所示:

????????如上圖需要將物體以y軸進行鏡像,那么可以用以下表達式表達:

????????用矩陣形式的表達如下:

????????當然還有其他方向的反射矩陣。

3.切變變換

????????如上圖這個變換好像是拽著圖形的右上角沿著x軸向右拉了一段距離,稱為切變(Shear)變換

????????提示:

? ? ? ? 1.y=0時,水平位移為0

? ? ? ? 2.y=1時,水平位移為a(當y=0.5時,水平位移是0.5a,即y*a)

? ? ? ? 3.垂直位移總是0

????????通過以上三個提示的規律可得出任何x軸上的位移為a*y,表示移動距離等于原本x位置加上a*y,即x’=x+a*y,而y軸的值始終不變,即y’=y。用矩陣表達為如下:

4.旋轉變換

????????說旋轉(Rotation),默認指的是繞原點(0,0)逆時針旋轉,下圖是物體繞原點逆時針旋轉θ角的示意圖:

????????以上變換同樣可以寫成矩陣的形式:

推導如下

? ? ? ? 1.首先確認要達到的目標位置(x’,y’),假設原點(x,y)。

? ? ? ? 2.用矩陣形式表示:

????????如此需要求得a,b,c,d四個未知數。

? ? ? ? 3.所有旋轉的點都要符合最終公式,包括特殊點。先找出特殊點A(1,0),將A點旋轉\theta度,通過三角定律可得A的坐標變成(\sin \theta\cos \theta),假設當前就是以A點為原始點,進行了\theta度的旋轉。那么帶入后矩陣表示:\begin{bmatrix} \cos \theta \\ \sin \theta \end{bmatrix}=\begin{bmatrix} a & b\\ c& d \end{bmatrix}\begin{bmatrix} 1\\ 0 \end{bmatrix}。通過矩陣相乘可得:cos\theta=a*1+b*0,sin\theta=c*1+d*0,所以a=cos\theta,c=sin\theta

? ? ? ? 4.同理使用B(0,1)這個特殊點旋轉\theta度,求得b=-sin\theta,d=cos\theta

5.線性變換

????????前面提到的變換都可以使用以下表達式表示:

? ? ? ? 用矩陣都可以如下表示:

????????繼而表示為:輸出坐標 = 變換矩陣 × 輸入坐標 的形式:

????????滿足以上條件的變換稱為線性(Linear)變換

5.齊次坐標

5.1仿射變換

? ? ? ? 如上圖所示,沿x軸平移tx,沿y軸平移ty,這樣是一個平移變換。可以用以下表達式表示:

? ? ? ?你會發現,它無法用前面熟悉的線性變換矩陣的形式表示,也就是說平移變換是非線性變換。 只能用以下矩陣形式表示,上面把這種變換稱為非線性變換,其實它有專門的名字叫仿射(Affine)變換。

? ? ? ? 為了方便統一,不希望平移變換是一個特例,那么是否有一個統一的方式來表示所有的變換?通過不斷探索,引入了齊次坐標(Homogeneous coordinates)

5.2什么是齊次坐標

? ? ? ? 我們可以在現在二維上,再增加一個維度,變成三維,在坐標系上添加第三個坐標(W坐標),如果在卡爾坐標系上有點(x,y),當轉換為齊次坐標后這個點變為(wx,wy,w)。反過來同樣適用,如果在其次坐標系中有一個點(x,y,w),轉換到笛卡爾坐標系下,這個點應該表示為(x/w,y/w)。如此,對于任何一個點和任意一個向量,我們都可以表示如下:

? ? ? ?注意:這里為什么點是加1,而向量是加0呢?因為向量是個方向,平移后還是原來的向量,具有平移不變性質。如果有一個向量(x,y,0),同樣經過上圖矩陣這么一個變換,得到的結果仍然希望是(x,y,0),添加0是為了保護向量在平移變換過程中不發生變化。

將點(x,y)表示成(x,y,1),平移變換可寫成如下矩陣形式:

?????????所以像如下這種仿射變換表達式:

????????通過引入齊次坐標后,可以使用線性變換的形式表達(根據上圖所示,表示先線性變換再平移變換的)。

????????所以就有了統一所有變換的表達式。可以發現最后變換矩陣最后一行都是0,0,1。

6.二維主要變換總結

?????????引入了齊次坐標后,二維變換表達式分別變成了如下:

????????縮放矩陣

????????旋轉矩陣

? ? ? ? 以上為繞原點逆時針旋轉的矩陣,當順時針旋轉時,如下:

????????平移矩陣

7.逆變換

????????一個物體做一個變換,變換完以后要恢復到原來的位置,變換回原來的位置的過程稱為逆(Inverse)變換,逆變換在數學上的實現是乘以變換矩陣的逆矩陣。

8.組合變換

? ? ? ? 組合(Composite)變換就是對一個物體進行多個變換。如下圖所示,左邊圖片通過某些變換后變成右邊的圖片。

可以有兩種變換:

????????1.先向右平移1個單位,再旋轉45度(默認都是繞原點、逆時針旋轉)。

????????2.先旋轉45度,后向右平移1個單位。

????????發現第一種變換方式并沒有達到想要的效果,而第二種方式達到了目的。

得出兩個結論:

????????1.一個復雜的變換,可以通過幾個簡單的變換得到。

????????2.變換的順利不同最終的結果也會不同,因為矩陣相乘是不滿足交換律的,矩陣相乘順序不同結果就會不同(特殊除外)。

注意:矩陣的應用是從右到左的,將上述組合變換用矩陣表達如下(先旋轉,再平移):

組合變換矩陣相乘應用的順序

????????上圖中A1,A2一直到An表示變換矩陣,一個點進行組合變換時,應用在該點的矩陣是從右到左。即矩陣An乘An-1一直乘到A1,實際應用到點的順序是A1,A2一直到An。

矩陣乘法結合律使用

? ? ? ? 矩陣相乘無法使用交換律,但是可以使用結合律。

????????一個點做多個變換即多個矩陣相乘再乘以這個點,根據矩陣乘法結合律,可以先把這些矩陣相乘,乘完在與這個點相乘,只要保證矩陣相乘的順序不變即可。假設A1到An都為3*3的矩陣,那么相乘的結果還是3*3的一個矩陣,那么就可以把很多個矩陣合成一個矩陣,簡化了公式。

????????所以上述例子的表達式可以簡化為:

????????同理,矩陣不僅能合成,還能夠分解。前面最開始圖就是把變換分解成了旋轉變換和平移變換。

9.非原點的旋轉變換

? ? ? ? 在上述中,默認旋轉變換是繞原點進行的,那么不是繞原點的變換該怎么實現呢?可以先把變換分解,分為三個步驟變換:

? ? ? ? 1.將旋轉中心移動到原點(所有點移動)

? ? ? ? 2.在原點做旋轉變換

? ? ? ? 3.平移到原點的位置

? ? ? ? 綜上得出結論,先平移T(-c)到原點,然后旋轉R(α),最后平移到原來位置T(c)。矩陣變換作用在物體上的順序是從右到左,所以矩陣表達式表示:

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

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

相關文章

【B站 heima】小兔鮮Vue3 項目學習筆記 Day06

文章目錄 購物車本地1. 列表購物車基礎數據渲染2. 列表購物車單選功能3. 列表購物車全選功能4. 列表購物車統計列表實現5. 接口-加入購物車6. 接口-刪除購物車7. 退出登錄-清空購物車數據8. 合并購物車到服務器(重要) 結算1. 路由配置和基礎數據渲染2. 地址切換-打開彈框交互實…

跨境人必讀:X(原Twitter)和Facebook區別是什么?

在今日全球化的商業環境中,跨境電商領域的企業和獨立站賣家正逐漸認識到社交媒體營銷的巨大潛力。特別是X(原Twitter)和Facebook,作為領先的社交媒體平臺,它們的使用不僅能夠提升品牌知名度,還能直接影響銷…

基于Java實現的圖書管理系統

前言:該圖書管理系統實現了查找、添加、刪除、顯示、借閱、歸還等功能,分為兩個用戶群體:管理者和普通用戶。使用了類與對象,封裝繼承多態,抽象類和接口等Java基礎知識。 一.思路 面向對象三部曲:找對象&…

oracle數據庫查看各類文件的位置

select name from v$controlfile; --控制文件 (一般以.ctl結尾) select file_name from dba_data_files; --數據文件 (一般以.dbf或.ora結尾) select file_name from dba_temp_files; --臨時文件(一般以.d…

OrangePi_Kunpeng_Pro開發板測驗——性能巨人

文章目錄 📑前言一、開箱初體驗的愉悅二、產品規格概述三、前置工作四、性能測試4.1 CPU 性能測試4.1.1 單線程 CPU 測試4.1.2 多線程 CPU 測試 4.2 內存性能測試4.2.1 內存讀寫性能測試4.2.2 高負載內存測試 4.3 I/O 性能測試4.4 網絡性能測試4.5 測試小結4.5.1 CP…

ECMAScript簡介

前言 ECMAScript(通常簡稱為ES)由ECMA國際標準化組織制定的一種腳本語言標準,Netscape最初開發的JavaScript演變而來。ECMAScript為JavaScript提供了基礎語言結構和功能。最初設計成一種腳本語言,用來服務Web。作為腳本語言ES同時…

CF1148C C. Crazy Diamond

題目鏈接 題意&#xff1a;給定一個數組p長度為n按照規則對下標滿足2 * abs(i - j) > n進行交換&#xff0c;最后使數組不遞減。輸出用的交換次數和每次交換的下標。&#xff08;交換次數不能超過5*n次&#xff09; 題解&#xff1a; 默認i < j,否則交換 abs(i - j) &…

基于異構圖的大規模微服務系統性能問題診斷

簡介&#xff1a;本文介紹由南開大學、清華大學、騰訊、國家超級計算天津中心共同合作的論文&#xff1a;基于異構圖的大規模微服務系統性能問題診斷。該論文已被IEEE Transactions on Services Computing期刊錄用 論文標題&#xff1a;Diagnosing Performance Issues for Lar…

docker刪除所有容器

筆記 要使用 Docker 刪除所有容器&#xff08;無論是停止的還是正在運行的&#xff09;&#xff0c;可以按照以下步驟操作&#xff1a; 1. **刪除所有正在運行的容器**&#xff1a; 首先&#xff0c;您需要停止所有正在運行的容器。可以使用以下命令&#xff1a; dock…

MATLAB分類與判別模型算法:K-近鄰法(KNN)分類代碼 【含Matlab源碼 MX_001期】

算法簡介&#xff1a; K-近鄰法&#xff08;KNN&#xff09;是一種簡單而有效的分類算法&#xff0c;也可用于回歸問題。它的基本原理是根據待分類樣本與訓練樣本的距離&#xff0c;選取最近的K個樣本進行投票決定分類。該算法無需訓練過程&#xff0c;而是利用訓練數據集直接…

數據結構與算法-反轉單鏈表

數據結構與算法-反轉單鏈表 大家好&#xff0c;歡迎回到我們的算法學習系列。今天&#xff0c;我們將探討一個在算法面試中非常經典的問題——反轉單鏈表。 什么是單鏈表&#xff1f; 在介紹問題之前&#xff0c;我們先簡單了解一下單鏈表。單鏈表是一種線性數據結構&#x…

氣缸前端鎖緊技術探討:從四個方面、五個方面、六個方面和七個方面深度解析

氣缸前端鎖緊技術探討&#xff1a;從四個方面、五個方面、六個方面和七個方面深度解析 在工業自動化領域&#xff0c;氣缸作為關鍵的執行元件&#xff0c;其前端鎖緊技術的穩定性與可靠性直接影響到整個系統的運行效率。本文將從四個方面、五個方面、六個方面和七個方面&#…

python 面對對象 類 補充

isinstance isinstance()&#xff1a;判斷一個實例化對象是否屬于這個類的&#xff0c;isinstance(對象&#xff0c;類) class Man():passclass Women():passa Man()print(isinstance(a, Man)) # True print(isinstance(a, Women)) # False 類的屬性操作 getattr() 獲…

小白windows系統從零開始本地部署大模型全記錄

大家好&#xff0c;最近兩年大語言模型風靡全球&#xff0c;最近&#xff0c;不少開源大模型&#xff0c;將模型部署到自己的電腦上&#xff0c;用個性化的數據微調想必是不少人的愿望&#xff0c;這次&#xff0c;讓我來分享從hugging face上下載部署chatglm3-6b中的經驗。 1.…

自動控制: 最小二乘估計(LSE)、加權最小二乘估計(WLS)和線性最小方差估計

自動控制&#xff1a; 最小二乘估計&#xff08;LSE&#xff09;、加權最小二乘估計&#xff08;WLS&#xff09;和線性最小方差估計 在數據分析和機器學習中&#xff0c;參數估計是一個關鍵步驟。最小二乘估計&#xff08;LSE&#xff09;、加權最小二乘估計&#xff08;WLS&…

conda環境里安裝ffmpeg

遇到的問題 在執行腳本的時候提示&#xff1a; /home/xxx/anaconda3/envs/llm-asr/lib/python3.9/site-packages/pydub/utils.py:170: RuntimeWarning: Couldnt find ffmpeg or avconv - defaulting to ffmpeg, but may not workwarn("Couldnt find ffmpeg or avconv - …

wifi貼碼推廣哪家靠譜?

如今越來越多的人想輕資產創業&#xff0c;WIFI貼碼是共享行業最無成本的創業項目了&#xff0c;而在選擇廠商的時候&#xff0c;大家就想要知道哪家公司靠譜&#xff0c;更好、更便宜、可靠。那么wifi貼碼推廣哪家靠譜&#xff1f;別急&#xff0c;下面小編將帶你一起了解。 目…

OpenAI開始訓練新的前沿模型——但GPT-5至少在90天內不會推出

ChatGPT 制造商 OpenAI 今早宣布&#xff0c;已開始訓練其新的“前沿模型”&#xff0c;并成立了一個新的安全委員會&#xff0c;由現任董事會成員 Bret Taylor&#xff08;OpenAI 董事會主席兼客戶服務初創公司 Sierra AI 聯合創始人、前谷歌地圖負責人和前 Facebook 首席技術…

BGP路由策略實驗

一、實驗拓撲 二、IP分配(骨干) R1&#xff1a; 0/0/0 15.0.0.1 24 0/0/1 18.0.0.2 24 0/0/2 19.0.0.1 24 R2: 0/0/0 16.0.0.1 24 0/0/1 15.0.0.2 24 R3: 0/0/0 17.0.0.2 24 0/0/1 18.0.0.1 24 R4: 0/0/0 16.0…

元宇宙vr工業產品展示空間降低研發成本

元宇宙產品虛擬展廳搭建編輯器為您提供了一個自助式元宇宙場景搭建的絕佳平臺。無論您是設計公司、攝影公司、營銷公司還是教育機構&#xff0c;我們都能為您量身打造專屬的元宇宙解決方案&#xff0c;滿足您的多樣化需求。 元宇宙產品虛擬展廳搭建編輯器具備強大的3D編輯功能&…