




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、空間直角坐標(biāo)轉(zhuǎn)換之仿射變換一、仿射變換仿射變換是空間直角坐標(biāo)變換的一種,它是一種二維坐標(biāo)到二維坐標(biāo)之間的線性變換,保持二維圖形的“平直線”和“平行性”,其可以通過(guò)一系列的原子變換的復(fù)合來(lái)實(shí)現(xiàn),包括平移(Translation)、縮放(Seale、翻轉(zhuǎn)(Flip)、旋轉(zhuǎn)(Rotation)和剪切(Shear,此類變換可以用一個(gè)3X3的矩陣來(lái)表示,其最后一行為(0,0,1)。該變換矩陣將原坐標(biāo)(x,y)變換為新坐標(biāo)(x,y),這里原坐標(biāo)和新坐標(biāo)皆視為最末一行為(1)的三維列向量,原列向量左乘變換矩陣得到新的列向量:xm00m01m02xm00*x+m01*y+m02y=m10m11m12y=m10
2、*x+m11*y+m12100111如果將它寫(xiě)成按旋轉(zhuǎn)、縮放、平移三個(gè)分量的復(fù)合形式,則其代數(shù)式如下:x=m00*x+m01*y+m02;y=m10*x+m11*y+m12;其示意圖如下:ro幾種典型的仿射變換:1 .publicstaticAffineTransformgetTranslateInstance(doubletx,doublety)平移變換,將每一點(diǎn)移動(dòng)到(x+tx,y+ty),變換矩陣為:10tx01ty001(譯注:平移變換是一種“剛體變換,rigid-bodytransformation,中學(xué)學(xué)過(guò)的物理,都知道啥叫“剛體”吧,就是不會(huì)產(chǎn)生形變的理想物體,平移當(dāng)然不會(huì)改變二
3、維圖形的形狀。同理,下面的“旋轉(zhuǎn)變換”也是剛體變換,而“縮放”“錯(cuò)切”都是會(huì)改變圖形形狀的。)2 .publicstaticAffineTransformgetScaleInstance(doublesx,doublesy)縮放變換,將每一點(diǎn)的橫坐標(biāo)放大(縮?。﹕x倍,縱坐標(biāo)放大(縮?。┲羢y倍,變換矩陣為:sx000sy03 .publicstaticAffineTransformgetShearInstance(doubleshx,doubleshy)剪切變換,變換矩陣為:1shx0shy10001相當(dāng)于一個(gè)橫向剪切與一個(gè)縱向剪切的復(fù)合1001shx0shy10010001001(譯注:“
4、剪切變換”又稱“錯(cuò)切變換”,指的是類似于四邊形不穩(wěn)定性那種性質(zhì),街邊小商店那種鐵拉門都見(jiàn)過(guò)吧?想象一下上面鐵條構(gòu)成的菱形拉動(dòng)的過(guò)程,那就是“錯(cuò)切”的過(guò)程。)4 .publicstaticAffineTransformgetRotateInstance(doubletheta)旋轉(zhuǎn)變換,目標(biāo)圖形圍繞原點(diǎn)順時(shí)針旋轉(zhuǎn)theta弧度,變換矩陣為:cos(theta)-sin(theta)0sin(theta)cos(theta)00015 .publicstaticAffineTransformgetRotateInstance(doubletheta,doublex,doubley)旋轉(zhuǎn)變換,目標(biāo)圖
5、形以(x,y)為軸心順時(shí)針旋轉(zhuǎn)theta弧度,變換矩陣為:cos(theta)-sin(theta)x-x*cos+y*sinsin(theta)cos(theta)y-x*sin-y*cos相當(dāng)于兩次平移變換與一次原點(diǎn)旋轉(zhuǎn)變換的復(fù)合:10-xcos(theta)01-ysin(theta)0010、仿射變換四參數(shù)求解-sin(theta)010xcos(theta)001y01001A、C#自定義函數(shù)實(shí)現(xiàn)求解:1、求解旋轉(zhuǎn)參數(shù)Rotaion:1日日/summary234567891011121314/獲取旋轉(zhuǎn)角度/summary/paramname=fromCoordPoint1/源點(diǎn)1目標(biāo)
6、點(diǎn)1源點(diǎn)2目標(biāo)點(diǎn)215/returns返回旋轉(zhuǎn)角度/returns1617privatedoubleGetRotation(CoordPointfromPoint1,CoordPointtoPoint1,CoordPointfromPoint2,CoordPointtoPoint2)1819日日(2021doublea=(toPoint2.Y-toPoint1.Y)*(fromPoint2.X-fromPoint1.X)-(toPoint2.X-toPoint1.X)*(fromPoint2.Y-fromPoint1.Y);2223Idoubleb=(toPoint2.X-toPoint1.X
7、)*(fromPoint2.X-fromPoint1.X)+(toPoint2.Y-toPoint1.Y)*(fromPoint2.Y-fromPoint1.Y);242526272829303132if(Math.Abs(b)0)returnMath.Tan(a/b);else33returnMath.Tan(0);2345678910111213141516173435L)2、求解縮放比例參數(shù)(Scale):1日U/獲取縮放比例因子/源點(diǎn)1/目標(biāo)點(diǎn)1/源點(diǎn)2/目標(biāo)點(diǎn)2/旋轉(zhuǎn)角度/返回旋轉(zhuǎn)因子1819privatedoubleGetScale(CoordPointfromPoint1,Coo
8、rdPointtoPoint1,CoordPointfromPoint2,CoordPointtoPoint2,doublerotation)2021日日(2223 doublea=toPoint2.X-toPoint1.X;2425 Idoubleb=(fromPoint2.X-fromPoint1.X)*Math.Cos(rotation)-(fromPoint2.Y-fromPoint1.Y)*Math.Sin(rotation);2627 if(Math.Abs(b)0)2829 returna/b;3031 else3233 return0;3435 L)3、求解X方向偏移距離參數(shù)(
9、XTranslate:1/*/23/得到X方向偏移量45/67/源點(diǎn)189/目標(biāo)點(diǎn)11011/旋轉(zhuǎn)角度1213/縮放因子1415/返回X方向偏移量1617privatedoubleGetXTranslation(CoordPointfromPoint1,CoordPointtoPoint1,doublerotation,doublescale)18192021return(toPoint1.X-scale*(fromPoint1.X*Math.Cos(rotation)-fromPoint1.Y*Math.Sin(rotation);222324254、求解Y方向偏移距離參數(shù)(YTransla
10、te):1/*/23/得到Y(jié)方向偏移量45/67/源點(diǎn)189/目標(biāo)點(diǎn)11011/旋轉(zhuǎn)角度1213/縮放因子1415/返回丫方向偏移量1617privatedoubleGetYTranslation(CoordPointfromPoint1,CoordPointtoPoint1,doublerotation,doublescale)18192021return(toPoint1.Y-scale*(fromPoint1.X*Math.Sin(rotation)+fromPoint1.Y*Math.Cos(rotation);2223EkC#+AE)ftW:1LJL_lIIIIII從控制點(diǎn)定義仿射變
11、換程式IIIIII源控制點(diǎn)III目標(biāo)控制點(diǎn)1011III返回變換定義1213privateITransformationGetAffineTransformation(IPointpFromPoints,IPointpToPoints)1415口日1617II實(shí)例化仿射變換對(duì)象1819);IAffineTransformation2D3GENtAffineTransformation=newAffineTransformation2DClass(21II從源控制點(diǎn)定義參數(shù)202223tAffineTransformation.DefineFromControlPoints(refpFromPo
12、ints,refpToPoints);2425查詢引用接口2627ITransformationtTransformation=tAffineTransformationasITransformation;2829returntTransformation;3031L三、空間對(duì)象轉(zhuǎn)換求出參數(shù)后,再利用公式對(duì)相應(yīng)坐標(biāo)點(diǎn)進(jìn)行轉(zhuǎn)換是一件相對(duì)簡(jiǎn)單的事件了。示例代碼:/轉(zhuǎn)換空間點(diǎn)/點(diǎn)/返回轉(zhuǎn)換后的點(diǎn)privateIGeometryTransformPoint(IPointpPoint)/*/說(shuō)明:采用相似變換模型(四參數(shù)變換模型)/X=ax+by+c/Y=-bx+ay+d/*doubleA=this.m_Scale*Math.Cos(doubleB=this.m_Scale*Math.Sin(IPointtPoint=newPointClass();tPoint.X=A*pPoint.X+B*pPoint.Y+this.m_RotationAngle);this.m_RotationAngle);this.m_DX;tPoint.Y=B*(-1.0)*
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小麥生產(chǎn)保護(hù)區(qū)管理辦法
- 二手拖拉機(jī)管理辦法規(guī)定
- 文博會(huì)資金管理辦法細(xì)則
- 防范非法宗教管理辦法
- 生產(chǎn)異常報(bào)警管理辦法
- 臨渭區(qū)環(huán)保節(jié)能管理辦法
- 股權(quán)激勵(lì)與員工持股平臺(tái)設(shè)立合同
- 股權(quán)質(zhì)押擔(dān)保合同范本:健康醫(yī)療產(chǎn)業(yè)
- 新建住宅項(xiàng)目購(gòu)房合同定金收據(jù)單
- 股份代持與公司戰(zhàn)略調(diào)整配套合同
- 種衣劑專題知識(shí)講座
- 化工自動(dòng)化儀表 選擇題805-1556
- GB/T 4153-2008混合稀土金屬
- GB/T 12008.2-2010塑料聚醚多元醇第2部分:規(guī)格
- 《一粒種子》課件
- 弘揚(yáng)錢學(xué)森精神PPT忠誠(chéng)擔(dān)當(dāng)踐行科學(xué)報(bào)國(guó)之志PPT課件(帶內(nèi)容)
- 上半年我國(guó)經(jīng)濟(jì)形勢(shì)分析與公司應(yīng)對(duì)策略
- 小學(xué)語(yǔ)文人教五年級(jí)下冊(cè)(統(tǒng)編)第六單元-15、自相矛盾學(xué)歷案
- 中國(guó)教育學(xué)會(huì)會(huì)員申請(qǐng)表
- 黃大年式教師團(tuán)隊(duì)申報(bào)
- 新冀人版小學(xué)科學(xué)三年級(jí)下冊(cè)全冊(cè)教案(2022年春修訂)
評(píng)論
0/150
提交評(píng)論