幾何變換詳解

2021-08-13 03:20:59 字數 2247 閱讀 3893

在三維圖形學中,幾何變換大致分為三種,平移變換(translation),縮放變換(scaling),旋轉變換(rotation)。以下討論皆針對directx,所以使用左手座標系。

將三維空間中的乙個點[x, y, z, 1]移動到另外乙個點[x', y', z', 1],三個座標軸的移動分量分別為dx=tx, dy=ty, dz=tz, 即

x' = x + tx

y' = y + ty

z' = z + tz

平移變換的矩陣如下。

將模型放大或者縮小,本質也是對模型上每個頂點進行放大和縮小(頂點座標值變大或變小),假設變換前的點是[x, y, z, 1],變換後的點是[x', y', z', 1],那麼

x' = x * sx

y' = y * sy

z' = z * sz

縮放變換的矩陣如下。

這是三種變換中最複雜的變換,這裡只討論最簡單的情況,繞座標軸旋轉,關於繞任意軸旋轉,在後續的隨筆中介紹。

繞x軸旋轉時,頂點的x座標不發生變化,y座標和z座標繞x軸旋轉θ度,旋轉的正方向為順時針方向(沿著旋轉軸負方向向原點看)。[x, y, z, 1]表示變換前的點,[x', y', z', 1]表示變換後的點。變換矩陣如下。

關於旋轉的正方向,opengl與多數圖形學書籍規定旋轉正方向為逆時針方向(沿著座標軸負方向向原點看),比如computer graphics c version,p409。

繞y軸旋轉時,頂點的y座標不發生變化,x座標和z座標繞y軸旋轉θ度。[x, y, z, 1]表示變換前的點,[x', y', z', 1]表示變換後的點。變換矩陣如下。

繞z軸旋轉時,頂點的z座標不發生變化,x座標和y座標繞z軸旋轉θ度。[x, y, z, 1]表示變換前的點,[x', y', z', 1]表示變換後的點。變換矩陣如下。

上面三個旋轉矩陣是如何得來的呢?我們推導一下,首先看一下二維的情況,再擴充套件到三維即可。實際上上面三種繞座標軸旋轉的情況屬於特殊的二維旋轉,比如繞z軸旋轉,相當於在與xoy平面上繞原點做二維旋轉。

假設點p(x, y)是平面直角座標系內一點,其到原點的距離為r,其與x軸的夾角為a,現將點p繞原點旋轉θ度,得到點p'(x', y'),p'與x軸的夾角為b,則a = b - θ。(注意,在二維座標中,逆時針旋轉時角度為正,順時針旋轉時角度為負,下圖中由p旋轉到p',角度為θ,若是由p'轉到p,則角度為-θ)。

於是可得下面的轉換方程

寫成矩陣的形式就是

求得旋轉矩陣為

由於這裡使用齊次座標,所以還需加上一維,最終變成如下形式

和前面給出的繞z軸旋轉矩陣完全吻合。

對於繞x軸旋轉的情況,我們只需將式一中的x用y替換,y用z替換,z用x替換即可。替換後得到

對應的旋轉矩陣為

對於繞y軸旋轉的情況,只需對式二做一次同樣的替換即可,的到的變換方程為

對應的變換矩陣為

平移變換矩陣的逆矩陣與原來的平移量相同,但是方向相反。

旋轉變換矩陣的逆矩陣與原來的旋轉軸相同但是角度相反。

縮放變換的逆矩陣正好和原來的效果相反,如果原來是放大,則逆矩陣是縮小,如果原來是縮小,則逆矩陣是放大。

幾何變換詳解

在三維圖形學中,幾何變換大致分為三種,平移變換 translation 縮放變換 scaling 旋轉變換 rotation 以下討論皆針對directx,所以使用左手座標系。將三維空間中的乙個點 x,y,z,1 移動到另外乙個點 x y z 1 三個座標軸的移動分量分別為dx tx,dy ty,d...

幾何變換 remap

影像幾何變換是將一幅影像的座標位置,對映到新座標位置,這種幾何變換不改變畫素值,只是在平面上進行畫素位置的重新安排,opencv提供remap 來進行幾何轉換,分以下兩部分 opencv的remap 函式需要輸入mapx和mapy兩個影像,這兩個影像尺寸和輸入圖相同,分別表示新的x和y的位置,假設d...

Eigen 幾何變換

筆記 題目 已知旋轉矩陣定義是沿著z軸旋轉45 請按照該定義初始化旋轉向量 旋轉矩陣 四元數 尤拉角。請程式設計實現 1 以上四種表達方式的相互轉換關係並輸出 2 假設平移向量為 1,2,3 請輸出旋轉矩陣和該平移矩陣構成的歐式變換矩陣,並根據歐式變換矩陣提取旋轉向量及平移向量 本程式學習目標 1 ...