邵成立,王智
(青島市勘察測(cè)繪研究院,山東青島 266032)
在工程測(cè)量和工業(yè)測(cè)量領(lǐng)域,經(jīng)常需要對(duì)不同的空間坐標(biāo)系進(jìn)行轉(zhuǎn)換,如WGS-84坐標(biāo)系和1954年北京坐標(biāo)系、地方坐標(biāo)系和工程坐標(biāo)系相互轉(zhuǎn)換,在攝影測(cè)量和GIS中,也經(jīng)常要對(duì)不同視角的坐標(biāo)系進(jìn)行轉(zhuǎn)換。以往的工作一般是采用布爾沙-沃爾夫等基于小角度的轉(zhuǎn)換模型,或?qū)⒋蠼嵌认绒D(zhuǎn)換為小角度再進(jìn)行轉(zhuǎn)換[1],或是做非線性處理[2,3],或是應(yīng)用羅德里格矩陣進(jìn)行坐標(biāo)轉(zhuǎn)換[4]。而在實(shí)際工程應(yīng)用中,經(jīng)常遇到大角度的空間直角坐標(biāo)轉(zhuǎn)換[5]。筆者根據(jù)方向余弦為參數(shù)、適用于任何角度旋轉(zhuǎn)的空間直角坐標(biāo)轉(zhuǎn)換的算法用C#編寫了計(jì)算程序,詳細(xì)說(shuō)明了程序設(shè)計(jì)和實(shí)現(xiàn)過(guò)程,并通過(guò)一個(gè)具體實(shí)例驗(yàn)證了此程序的可行性。
設(shè)點(diǎn)A在空間直角坐標(biāo)O-XYZ中的坐標(biāo)為(Xa,Ya,Za),在空間直角坐標(biāo) O - X'Y'Z'中的坐標(biāo)為(Xb,Yb,Zb),令 X'軸在 O -XYZ 中的方向余弦為(a1,b1,c1),Y'軸在 O -XYZ 中的方向余弦為(a2,b2,c2),Z'軸在O-XYZ中的方向余弦為(a3,b3,c3),而令X軸在O -X'Y'Z'中的方向余弦為(a1,a2,a3),Y 軸在 O -X'Y'Z'中的方向余弦為(b1,b2,b3),Z 軸在 O -X'Y'Z'中的方向余弦為(c1,c2,c3),O'點(diǎn)相對(duì)于O點(diǎn)的平移參數(shù)為(Xo,Yo,Zo),比例參數(shù)為 u。

圖1 坐標(biāo)轉(zhuǎn)換模型示意圖
則兩個(gè)坐標(biāo)系下同名點(diǎn)坐標(biāo)可用矩陣表示為:

且旋轉(zhuǎn)矩陣是正交矩陣,則滿足下列條件:

對(duì)式(1)進(jìn)行泰勒級(jí)數(shù)展開,可列出如下誤差方程形式:

式中,Vi=[VXiVYiVZi]T


根據(jù)式(3)可列出如下條件方程:

其中X的含義同上,B和W分別為:

上述各式中,上標(biāo)為0的數(shù)為近似值,dX0、dY0、dZ0、du0、da1、da2、da3、db1、db2、db3、dc1、dc2、dc3為改正數(shù)。按附有條件的間接平差解算式(3)和式(4),就可得到 X[6]。
筆者使用Visual C#.net 2005作為開發(fā)工具編制了程序。Visual C#.net 2005是.NET平臺(tái)下最為強(qiáng)大的開發(fā)工具,它提供了包括設(shè)計(jì)、編碼、編譯調(diào)試和數(shù)據(jù)庫(kù)連接操作等基本功能,以及基于開放架構(gòu)的服務(wù)器組件開發(fā)平臺(tái)、企業(yè)開發(fā)工具和應(yīng)用程序重新發(fā)布工具及性能評(píng)測(cè)報(bào)告等高級(jí)功能[7]。此程序主要實(shí)現(xiàn)兩個(gè)功能:一是根據(jù)在兩個(gè)坐標(biāo)系中3個(gè)以上的公共點(diǎn)坐標(biāo)計(jì)算轉(zhuǎn)換參數(shù),二是根據(jù)算出的轉(zhuǎn)換參數(shù)實(shí)現(xiàn)對(duì)轉(zhuǎn)換點(diǎn)在兩個(gè)坐標(biāo)系下進(jìn)行轉(zhuǎn)換。程序界面如圖2所示。

圖2 程序主界面
具體實(shí)現(xiàn)過(guò)程如下(僅列出部分代碼加以說(shuō)明):
(1)啟動(dòng) Visual C#.net 2005,新建項(xiàng)目,選擇“Windows”應(yīng)用程序。如圖1所示在窗體上添加相應(yīng)的 Label、Button、TextBox、PictureBox 等控件,并修改相應(yīng)的屬性。程序中要用大量的矩陣運(yùn)算,應(yīng)添加矩陣類,雙擊Button控件,添加相應(yīng)代碼。
(2)TextBox里的值為String類型,應(yīng)首先把它轉(zhuǎn)化為double類型

(3)定義參數(shù),并賦初值,定義所需的相應(yīng)矩陣

(4)進(jìn)行迭代運(yùn)算
根據(jù)附有條件的間接平差分別給誤差方程中的B、L以及條件方程中C、Wx矩陣賦值,并用矩陣類中的函數(shù)進(jìn)行相應(yīng)的計(jì)算。計(jì)算出參數(shù)改正值后使其加在初值上,迭代循環(huán)使用do…while()語(yǔ)句。While后面括號(hào)中的迭代條件這里取為旋轉(zhuǎn)矩陣中的任何一個(gè)元素大于0.001。最后通過(guò)ToString()函數(shù)把結(jié)果轉(zhuǎn)換為字符串類型并賦值到相應(yīng)的TextBox里

(5)利用轉(zhuǎn)換參數(shù)計(jì)算任意點(diǎn)的坐標(biāo)轉(zhuǎn)換值

為了檢驗(yàn)該程序的效果,筆者在同濟(jì)大學(xué)彰武路校區(qū)里用索佳Set220全站儀對(duì)一構(gòu)件進(jìn)行觀測(cè),采用坐標(biāo)測(cè)量功能在兩個(gè)任意假定的不同空間直角坐標(biāo)系下對(duì)其表面采集了10個(gè)數(shù)據(jù)點(diǎn),其觀測(cè)結(jié)果如表1所示。

在兩個(gè)不同的空間直角坐標(biāo)系下的坐標(biāo)觀測(cè)值 表1
以點(diǎn)1~點(diǎn)4作為公共點(diǎn)利用該程序算出的轉(zhuǎn)換參數(shù)為:

u=1.001760538 迭代次數(shù)n=4
利用這些轉(zhuǎn)換參數(shù)可計(jì)算出各個(gè)點(diǎn)轉(zhuǎn)換值,結(jié)果如表2所示。

實(shí)測(cè)值和轉(zhuǎn)換值的比較 表2
計(jì)算結(jié)果表明,利用本文給出的程序能夠較好的實(shí)現(xiàn)空間任意角度的不同直角坐標(biāo)轉(zhuǎn)換。
基于13參數(shù)的空間直角坐標(biāo)轉(zhuǎn)換模型公式簡(jiǎn)單,且易于程序?qū)崿F(xiàn)。其轉(zhuǎn)換精度不僅和公共點(diǎn)個(gè)數(shù)有關(guān)而且和迭代條件有關(guān)。
[1]胡亞江,楊曉梅,沙月進(jìn).大歐拉角的空間直角坐標(biāo)轉(zhuǎn)換方法探討[J].現(xiàn)代測(cè)繪,2006,11(6):10~12.
[2]胡志剛,花向紅,李海英.基于同倫算法的非線性坐標(biāo)轉(zhuǎn)換模型研究[J].測(cè)繪工程,2008,17(6):24~28.
[3]周興華,趙吉先.淺談空間直角坐標(biāo)系非線性坐標(biāo)轉(zhuǎn)換[J].水利科技與經(jīng)濟(jì),2005,11(4):210~212.
[4]張卡,張道俊,盛業(yè)華等.三維坐標(biāo)轉(zhuǎn)換的兩種方法及其比較研究[J].數(shù)學(xué)的實(shí)踐與認(rèn)識(shí),2008,38(23):121~128.
[5]潘國(guó)榮,周瑩,張德海.坐標(biāo)轉(zhuǎn)換模型在盾構(gòu)姿態(tài)計(jì)算中的應(yīng)用[J].大地測(cè)量與地球動(dòng)力學(xué),2006,8(3):0084 ~04.
[6]陳義,沈云中,劉大杰.適用于大旋轉(zhuǎn)角的三維基準(zhǔn)轉(zhuǎn)換的一種簡(jiǎn)便模型[J].武漢大學(xué)學(xué)報(bào)(信息科學(xué)版),2004,29(12):1101 ~1105.
[7]王超,潘楊,張維維.Visual C#通用范例開發(fā)金典[M].北京:電子工業(yè)出版社,2008.