資源描述:
《空間直角坐標轉(zhuǎn)換之仿射變換》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、空間直角坐標轉(zhuǎn)換之仿射變換一、仿射變換仿射變換是空間直角坐標變換的一種,它是一種二維坐標到二維坐標之間的線性變換,保持二維圖形的“平直線”和“平行性”,其可以通過一系列的原子變換的復合來實現(xiàn),包括平移(Translation)、縮放(Scale)、翻轉(zhuǎn)(Flip)、旋轉(zhuǎn)(Rotation)和剪切(Shear)。此類變換可以用一個3×3的矩陣來表示,其最后一行為(0,0,1)。該變換矩陣將原坐標(x,y)變換為新坐標(x',y'),這里原坐標和新坐標皆視為最末一行為(1)的三維列向量,原列向量左乘變換矩陣得到新的列向量:[x'][m00m01m02][x][m00*x+m01*y+
2、m02][y']=[m10m11m12][y]=[m10*x+m11*y+m12][1][001][1][1]如果將它寫成按旋轉(zhuǎn)、縮放、平移三個分量的復合形式,則其代數(shù)式如下:x’=m00*x+m01*y+m02;y’=m10*x+m11*y+m12;其示意圖如下:幾種典型的仿射變換:1.publicstaticAffineTransformgetTranslateInstance(doubletx,doublety)平移變換,將每一點移動到(x+tx,y+ty),變換矩陣為:[10tx][01ty][001](譯注:平移變換是一種“剛體變換”,rigid-bodytransfo
3、rmation,中學學過的物理,都知道啥叫“剛體”吧,就是不會產(chǎn)生形變的理想物體,平移當然不會改變二維圖形的形狀。同理,下面的“旋轉(zhuǎn)變換”也是剛體變換,而“縮放”、“錯切”都是會改變圖形形狀的。)2.publicstaticAffineTransformgetScaleInstance(doublesx,doublesy)縮放變換,將每一點的橫坐標放大(縮小)至sx倍,縱坐標放大(縮?。┲羢y倍,變換矩陣為:[sx00][0sy0][001]3.publicstaticAffineTransformgetShearInstance(doubleshx,doubleshy)剪切變換
4、,變換矩陣為:[1shx0][shy10][001]相當于一個橫向剪切與一個縱向剪切的復合[100][1shx0][shy10][010][001][001](譯注:“剪切變換”又稱“錯切變換”,指的是類似于四邊形不穩(wěn)定性那種性質(zhì),街邊小商店那種鐵拉門都見過吧?想象一下上面鐵條構成的菱形拉動的過程,那就是“錯切”的過程。)4.publicstaticAffineTransformgetRotateInstance(doubletheta)旋轉(zhuǎn)變換,目標圖形圍繞原點順時針旋轉(zhuǎn)theta弧度,變換矩陣為:[cos(theta)-sin(theta)0][sin(theta)cos(t
5、heta)0][001]5.publicstaticAffineTransformgetRotateInstance(doubletheta,doublex,doubley)旋轉(zhuǎn)變換,目標圖形以(x,y)為軸心順時針旋轉(zhuǎn)theta弧度,變換矩陣為:[cos(theta)-sin(theta)x-x*cos+y*sin][sin(theta)cos(theta)y-x*sin-y*cos][001]相當于兩次平移變換與一次原點旋轉(zhuǎn)變換的復合:[10-x][cos(theta)-sin(theta)0][10x][01-y][sin(theta)cos(theta)0][01y][0
6、01][001][001]二、仿射變換四參數(shù)求解A、C#自定義函數(shù)實現(xiàn)求解:1、求解旋轉(zhuǎn)參數(shù)Rotaion:?1/**////?2?3????????///獲取旋轉(zhuǎn)角度?4?5????????///?6?7????????///源點1?8?9????????///目標點11011????????///源點21213????
7、????///目標點21415????????///返回旋轉(zhuǎn)角度1617????????private?double?GetRotation(CoordPoint?fromPoint1,?CoordPoint?toPoint1,CoordPoint?fromPoint2,CoordPoint?toPoint2)1819????????{2021????????????do