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