資源描述:
《仿射變換原理與示例》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、仿射變換在幾何上定義為兩個(gè)向量空間之間的一個(gè)仿射變換或者仿射映射(來自拉丁語,affinis,“和。..相關(guān)”)由一個(gè)線性變換接上一個(gè)平移組成。目錄1原理2示例3相關(guān)例子1原理編輯在有限維的情況,每個(gè)仿射變換可以由一個(gè)矩陣A和一個(gè)向量b給出,它可以寫作A和一個(gè)附加的列b。一個(gè)仿射變換對(duì)應(yīng)于一個(gè)矩陣和一個(gè)向量的乘法,而仿射變換的復(fù)合對(duì)應(yīng)于普通的矩陣乘法,只要加入一個(gè)額外的行到矩陣的底下,這一行全部是0除了最右邊是一個(gè)1,而列向量的底下要加上一個(gè)1。AffineTransform類描述了一種二維仿??仿射變換流程圖射變換的功能,它是一
2、種二維坐標(biāo)到二維坐標(biāo)之間的線性變換,保持二維圖形的“平直性”(譯注:straightness,即變換后直線還是直線不會(huì)打彎,圓弧還是圓弧)和“平行性”(譯注:par??常用的仿射變換:旋轉(zhuǎn)、傾斜、平移、縮放allelness,其實(shí)是指保二維圖形間的相對(duì)位置關(guān)系不變,平行線還是平行線,而直線上點(diǎn)的位置順序不變,另特別注意向量間夾角可能會(huì)發(fā)生變化。)仿射變換可以通過一系列的原子變換的復(fù)合來實(shí)現(xiàn),包括:平移(Translation)、縮放(Scale)、翻轉(zhuǎn)(Flip)、旋轉(zhuǎn)(Rotation)和錯(cuò)切(Shear)。此類變換可以用一個(gè)3
3、×3的矩陣來表示,其最后一行為(0,0,1)。該變換矩陣將原坐標(biāo)(x,y)變換為新坐標(biāo)(x',y'),這里原坐標(biāo)和新坐標(biāo)皆視為最末一行為(1)的三維列向量,原列向量左乘變換矩陣得到新的列向量:2示例編輯幾種典型的仿射變換:publicstaticAffineTransformgetTranslateInstance(doubl??仿射變換-例etx,doublety)平移變換,將每一點(diǎn)移動(dòng)到(x+tx,y+ty),變換矩陣為:[10tx][01ty][001](譯注:平移變換是一種“剛體變換”,rigid-bodytransfor
4、mation,中學(xué)學(xué)過的物理,都知道啥叫“剛體”吧,就是不會(huì)產(chǎn)生形變的理想物體,平移當(dāng)然不會(huì)改變二維圖形的形狀。同理,下面的“旋轉(zhuǎn)變換”也是剛體變換,而“縮放”、“錯(cuò)切”都是會(huì)改變圖形形狀的。)publicstaticAffineTransformgetScaleInstance(doublesx,doublesy)縮放變換,將每一點(diǎn)的橫坐標(biāo)放大(縮?。┲羢x倍,縱坐標(biāo)放大(縮?。┲羢y倍,變換矩陣為:[sx00][0sy0][001]當(dāng)sx=sy時(shí),稱為尺度縮放,sx不等于sy時(shí),這就是我們平時(shí)所說的拉伸變換。publicsta
5、ticAffineTransformgetShearInstance(doubleshx,doubleshy)剪切變換,變換矩陣為:[1shx0][shy10][001]相當(dāng)于一個(gè)橫向剪切與一個(gè)縱向剪切的復(fù)合[100][1shx0][shy10][010][001][001](譯注:“剪切變換”又稱“錯(cuò)切變換”,指的是類似于四邊形不穩(wěn)定性那種性質(zhì),街邊小商店那種鐵拉門都見過吧?想象一下上面鐵條構(gòu)成的菱形拉動(dòng)的過程,那就是“錯(cuò)切”的過程。)publicstaticAffineTransformgetRotateInstance(do
6、ubletheta)??典型的仿射變換-平移變換??典型的仿射變換-縮放變換??典型的仿射變換-剪切變換??典型的仿射變換-旋轉(zhuǎn)變換??典型的仿射變換-旋轉(zhuǎn)變換3相關(guān)例子編輯旋轉(zhuǎn)變換1,目標(biāo)圖形圍繞原點(diǎn)逆時(shí)針旋轉(zhuǎn)theta弧度,變換矩陣為:[cos(theta)-sin(theta)0][sin(theta)cos(theta)0][001]publicstaticAffineTransformgetRotateInstance(doubletheta,doublex,doubley)旋轉(zhuǎn)變換2,目標(biāo)圖形以(x,y)為軸心逆時(shí)針旋
7、轉(zhuǎn)theta弧度,變換矩陣為:[cos(theta)-sin(theta)x-x*cos+y*sin][sin(theta)cos(theta)y-x*sin-y*cos][001]相當(dāng)于兩次平移變換與一次原點(diǎn)旋轉(zhuǎn)變換的復(fù)合:[10x][cos(theta)-sin(theta)0][10-x][01y][sin(theta)cos(theta)0][01-y][001][001][001]這里是以空間任一點(diǎn)為圓心旋轉(zhuǎn)的情況。