1. 程式人生 > >矩陣變換:沿任意方向縮放、映象、正交投影及切變及其推導

矩陣變換:沿任意方向縮放、映象、正交投影及切變及其推導

映象、正交投影和切變的推導都可根據縮放變形而來。在要縮放方向上去縮放因子k,如果|k|<1,物體"收縮", |k|>1,物體“膨脹”;k=0,正交投影;k<0,映象; 切變稍有不同。

1. 縮放

01. 沿座標軸縮放

2D中有兩個縮放因子Kx和Ky,p和q是原來的基向量,縮放因子單獨影響基向量,得到p`和q`:



得到縮放矩陣:


3D中增加縮放因子Kz



02.沿任意方向縮放

設n為平行於縮放方向的單位向量,k為縮放因子,縮放沿著穿過原點的並平行於n的直線(2D中)或平面(3D中)進行。

先討論2D中的推導過程。我們需要推導一個表示式,給定向量v,可以通過v,n和k來計算v`。將v和v`分解為平行和垂直於n的分向量



v||是v在n上的投影


v⊥垂直於n,不會受縮放影響


v`||受縮放因子影響


推導得到v`


通過表示式來推導基向量


通過基向量構建矩陣,得到以單位向量n為縮放方向,以k為縮放因子的縮放矩陣


同樣的原理運用在3D中


是scale(縮放)的縮寫S(n,k)表示縮放矩陣


2.正交投影

投影意味和降維操作,將所有的點拉平到要投影的直線或平面上,從原來的點到投影點的直線相互平行,這就是正交投影。透視投影是另一種投影。


01. 向座標軸或平面上投影

通過將垂直方向上縮放因子設為0來實現,如將3D點投影到xy平面,則拋棄z分量,通過將z方向上的縮放因子設為0實現。

P是projection(投影)的縮寫,2D中,Px表示向x軸投影,Py同理:


3D中,Pxy表示向xy平面投影,其餘同理:


02. 向任意指向或平面投影

投影有垂直於直線或平面的向量n定義,通過使n方向上的縮放因為0就能匯出任意方向的投影矩陣。P(n)表示向垂直於向量n的軸或平面投影矩陣,S(n,0)表示在n方向上的縮放因子為0的縮放矩陣.

2D:


3D:


3. 映象

也叫做反射,與正交投影相似,正交投影將縮放值k設為0,而映象則設為-1.


R是reflect(反射)的縮寫。2D:


3D:


4.切變(Shearing)

切變是座標系的變換,非均勻的拉伸。切變時候,角度變化,但是面積或體積不變。也可以理解為座標軸間的角度變化,造成的扭曲。

如下圖,這是x座標根據y座標的切變,機器人的y座標沒有變化,只有x座標變化了,變化後的座標x`可以理解為將y座標乘以切變因子s與原座標x的和:x` = x + sy。如果是3D則增加z座標的切變因子t: 

x` = x + sy,y` = y + tz


2D中切變矩陣為:

x座標根據y座標的切變


y座標根據x座標的切變


x,y座標被z座標切變


相關推薦

矩陣變換沿任意方向映象投影切變及其推導

映象、正交投影和切變的推導都可根據縮放變形而來。在要縮放方向上去縮放因子k,如果|k|<1,物體"收縮", |k|>1,物體“膨脹”;k=0,正交投影;k<0,映象; 切變稍有不同。 1. 縮放 01. 沿座標軸縮放 2D中有兩個縮放因子Kx和Ky,p

Moore-Penrose廣義逆可解決MATLAB報錯“矩陣接近奇異值,或者錯誤。結果可能不準確”

但實際上執行過程中我們會遇到:當AX=b線性方程組是一個病態方程組;或者A是奇異矩陣(即det(A)=0,不可逆),沒法求逆,用不了inv(A)方法只能用A\b,此時MATLAB會報錯“矩陣接近奇異值,或者縮放錯誤。結果可能不準確”…網路上很多人問這個問題怎麼解決,其實不

記一次產品需求圖片等比和CSS自適應布局16:9

是我 width 圖片展示 網上 IT tom 就會 很好 尺寸 前言   前陣子,產品跑過來問我現有的模板中沒有圖片模板,需要添加一個圖片模板;然而,他要求圖片在展示區最好能夠實現隨著窗口的變化而自動按圖片比例等比縮放,並且居中展示圖片。我當時想著,拋開技術實現層面,圖

點選螢幕對顯示物件進行操作調整位置/旋轉模式/拖動

1.載入資源 2.將資源新增到顯示列表並設定錨點 ////////////////////////////////*調整位置關鍵程式碼*/ this.stage.addEventListener(egret.TouchEvent.TOUCH_BEGIN, (e: egret.TouchEvent) =&

OpenCV2:影象的幾何變換,平移映象旋轉(1)

影象的幾何變換是在不改變影象內容的前提下對影象畫素的進行空間幾何變換,主要包括了影象的平移變換、映象變換、縮放和旋轉等。本文首先介紹了影象幾何變換的一些基本概念,然後再OpenCV2下實現了影象的平移變換、映象變換、縮放以及旋轉,最後介紹幾何的組合變換(平移+縮放+旋轉)。

瘋狂ios講義之例項通過捏合手勢圖片

例項:通過捏合手勢縮放圖片 捏合手勢處理器可以檢測到使用者手勢捏合的比例,解析該捏合比例即可對圖片進行縮放。本例項將通過捏合手勢對圖片進行縮放。建立一個Single View Application,該應用包含一個應用程式委託類、一個檢視控制器類以及配套的Main.storyboard介面

圖形學中的各種矩陣變換模型檢視矩陣投影矩陣,切線空間矩陣

        圖形學中,場景模型渲染到螢幕主要包括以下流程:首先通過模型矩陣變換模型位位置朝向和大小,確定模型在世界座標中的位置,然後通過檢視矩陣將模型的世界座標位置轉換到視點座標下,接著通過投影矩陣將視點座標下的模型轉換視口空間,最後將視口位置變換到螢幕位置上。此外,對於

矩陣運算——平移,旋轉,

平時開發程式,免不了要對影象做各種變換處理。有的時候變換可能比較複雜,比如平移之後又旋轉,旋轉之後又平移,又縮放。 直接用公式計算,不但複雜,而且效率低下。這時可以藉助變換矩陣和矩陣乘法,將多個變換合成一個。 最後只要用一個矩陣對每個點做一次處理就可以得到想要的結果。

系列(三)一個可以手勢拖拽旋轉的layout

弄了一個下午,終於搞出來了,PowerfulLayout 下面是一個功能強大的改造的例子: 可以實現以下需求: 1.兩個手指進行縮放佈局 2.所有子控制元件也隨著縮放, 3.子控制元件該有的功能不能丟失(像button有可被點選的功能,縮放後不能丟失該功能)

OpenCV2:影象的幾何變換,平移映象旋轉(2)

在OpenCV2:影象的幾何變換,平移、映象、縮放、旋轉(1)主要介紹了影象變換中的向前對映、向後對映、處理變換過程中浮點座標畫素值的插值演算法,並且基於OpenCV2實現了兩個簡單的幾何變換:平移和映象變換。本文主要稍微複雜點的兩個幾何變換:縮放和旋轉。 1.影象縮放

Android 使用變形矩陣實現可以拖拽,,旋轉的影象

上篇博文介紹了變形矩陣的一些用法,所以這篇博文就結合變形矩陣來實現一個可以拖拽、縮放、旋轉的影象吧。 首先,我們就繼承ImageView來實現我們的自定義View。 程式碼如下: public class MyMatrixImg extends Ima

MFC空間幾何變換之影象平移映象旋轉

一. 影象平移        前一篇文章講述了影象點運算(基於畫素的影象變換),這篇文章講述的是影象幾何變換:在不改變影象內容的情況下對影象畫素進行空間幾何變換的處理方式。         點運算對單幅影象做處理,不改變畫素的空間位置;代數運算對多幅影象做處理,也不

BitMap高效顯示策略(一)大圖的和載入

Android對不同螢幕和dpi的裝置有單個應用程式執行記憶體的限制。在有的裝置上,最嚴格的限制甚至可以小到只有16MB記憶體。 Bitmap會消耗很多記憶體,如果一個手機能夠拍攝2592x1936 pixels (5 MB)的圖片,bitmap的配置是使用ARGB_888

vue-leaflet如何設定地圖的Leaflet Controls樣式,更改地圖的控制元件右下角狀態控制元件的顯示隱藏

首先效果如圖:隱藏掉放大縮小控制元件和右下角的logo等引數資訊。  只需要在map的options屬性裡設定如下兩個引數為false: zoomControl: false, attributionControl: false, 要注意並不是所有屬性都可以在opti

Qt 無邊框無非客戶區視窗拖動改變大小滑鼠變形,windows同款,完美實現

簡單點說,是在windows下實現視窗拖動和改變大小,一種方法是過載mousePressEvent系列全家福函式,然後在mouseMoveEvent中實現邊移滑鼠視窗就一邊重繪。這種方法網上資料很多,見下:這種方法缺點是移動的時候視窗閃爍厲害。摒棄。但該方法給了一個很好的思路

android將給定圖片維持寬高比後,擷取中間的正方形部分

       /**      * 將給定圖片維持寬高比縮放後,擷取正中間的正方形部分。      * @param bitmap      原圖      * @param edgeLength  希望得到的正方形部分的邊長      * @return  縮放擷取正中部

【知識整理】微信小程式-圖片在容器中等比至垂直水平居中,並計算後真實寬高

一.對於微信小程式頁面中的圖片,官方提供了image元件進行支援。根據官方文件,image元件用法如下: 例:圖片水平、垂直居中佈局程式碼如下: <view style="width:75

LODOP整頁,寬度高度溢出

打印控件 asc 寬高 lod color 全局 head class 溢出 LODOP中,超文本超過打印項高度會自動分頁,可以用語句進行縮放,讓打印內容都在一頁中。例如,整頁縮放和高度溢出縮放。如下是三個語句及其效果,註意對內容縮放可能會導致變形哦,畢竟是不等比例縮放:L

D3DXMatrixOrthoLH +投影矩陣

#include<d3d9.h>#include<d3dx9.h>#pragma comment(lib, "d3d9.lib")#pragma comment(lib, "d3dx9.lib")#define WINDOW_CLASS "UGPDX"#define WIND

投影變換與透視投影

相機投影模型 三維計算機圖形學的基本問題之一就是三維觀察問題:即如何把三維場景投影到要顯示的二維影象。大多數經典的解決投影變換方法有兩種:正交投影變換和透視投影變化。       正交投影變換用一個長方體來取景,並把場景投影到這個長方體的前面。這個投影不會有透視收縮效果