資源簡(jiǎn)介
簡(jiǎn)單的利用C++程序語(yǔ)言編寫(xiě)的空間后方交會(huì)程序

代碼片段和文件信息
//單張相片的空間后方交會(huì)程序
//說(shuō)明:程序未作底片變形系統(tǒng)誤差改正,像點(diǎn)坐標(biāo)直接使用且內(nèi)方位元素X0=Y0=0像點(diǎn)坐標(biāo)為等精度不相關(guān)觀測(cè)值
#include?
#include?//標(biāo)準(zhǔn)輸出輸入流
#include?//用于數(shù)學(xué)計(jì)算
#include??//調(diào)用函數(shù)exit()需包含此文件
#include?//控制輸出格式需包含此文件
#include?“matrixfunction.h“//矩陣運(yùn)算頭文件
int?N=4;//控制點(diǎn)總數(shù)
/////////////////////////////////讀入數(shù)據(jù)函數(shù)/////////////////////////////////////////
void?getdata(char?*filenamedouble?*xdouble?*ydouble?*x1double?*y1double?*z1)
//讀取數(shù)據(jù)文件(文件名,像x,像y,物x1,物y1,物z1)
{
ifstream?filein(filenameios::in|ios::nocreate);??
????//?以輸入方式打開(kāi)一個(gè)文件,ios::nocreate表示原文件不存在時(shí),不創(chuàng)建
if(!filein)
{??cout<<“打開(kāi)文件失敗!文件可能不存在!“< ???exit(1);
}
for(int?i=0;i filein>>x[i]>>y[i]>>x1[i]>>y1[i]>>z1[i];//讀入每行(每個(gè)控制點(diǎn))的像方和物方坐標(biāo)
filein.close();
}
int?main()
{
int?ij;//循環(huán)所用輔助參數(shù)
double?a1a2a3b1b2b3c1c2c3;//旋轉(zhuǎn)矩陣九個(gè)元素
double?f=153.24;//攝影機(jī)主距(mm)
double?X0=0; double?Y0=0;//內(nèi)方位元素為0
double?M=50000;//攝影比例尺分母
double?xsyszsfaiomgkaf;//6個(gè)外方位元素
double?*A=new?double?[2*N*6];//存放外方位元素系數(shù)A的矩陣2i*6
double?det[6];//6個(gè)外方位元素改正值矩陣
double?*L=new?double?[2*N];
double?*gpx=new?double?[N];double?*gpy=new?double?[N];double?*gpz=new?double?[N];//存儲(chǔ)控制點(diǎn)物方坐標(biāo)
double?*ipx=new?double?[N];double?*ipy=new?double?[N];//存儲(chǔ)控制點(diǎn)像方坐標(biāo)
double?*ipx0=new?double?[N];double?*ipy0=new?double?[N];//存儲(chǔ)由共線(xiàn)條件解算的近似像點(diǎn)坐標(biāo)
double?*AT=new?double[2*N*6];//存儲(chǔ)外方位元素系數(shù)轉(zhuǎn)置矩陣AT6*2i
double?*TEP1=new?double[36];double?*TEP2=new?double[6];double?*TEP3=new?double?[36];//中間臨時(shí)矩陣
double?Q[6];//存儲(chǔ)6個(gè)權(quán)倒數(shù)
double?*V=new?double?[2*N];//存儲(chǔ)像點(diǎn)觀測(cè)值改正數(shù)
double?Vsum=0m0;//單位權(quán)中誤差
double?m[6];//存儲(chǔ)六個(gè)外方位元素的中誤差
////////////////////////讀入觀測(cè)數(shù)據(jù)/////////////////////////////
getdata(“sourcefile.txt“ipxipygpxgpygpz);
////////////////////////確定未知數(shù)的初始值////////////////////////
f/=1000;//將主距f單位從mm劃成m
fai=omg=kaf=0.0;
xs=ys=0.0;zs=M*f;
for(i=0;i {
ipx[i]/=1000;
ipy[i]/=1000;
xs+=gpx[i];
ys+=gpy[i];
}
xs/=N;
ys/=N;
//////////////////////迭代///////////////////////
while?(fabs(det[0])>0.000001||fabs(det[1])>0.000001||fabs(det[2])>0.000001||fabs(det[3])>2.90888208656e-5
||fabs(det[4])>2.90888208656e-5||fabs(det[5])>2.90888208656e-5) //2.90888208656e-5為0.1分換算成的弧度值
{
/////////////////計(jì)算旋轉(zhuǎn)矩陣
a1=cos(fai)*cos(kaf)-sin(fai)*sin(omg)*sin(kaf);
a2=-cos(fai)*sin(kaf)-sin(fai)*sin(omg)*cos(kaf);
a3=-sin(fai)*cos(omg);
b1=cos(omg)*sin(kaf);
b2=cos(omg)*cos(kaf);
b3=-sin(omg);
c1=sin(fai)*cos(kaf)+cos(fai)*sin(omg)*sin(kaf);
c2=-sin(fai)*sin(kaf)+cos(fai)*sin(omg)*cos(kaf);
c3=cos(fai)*cos(omg);
///////////////////////////逐點(diǎn)計(jì)算///////////////////////////
for?(i=0;i {
////////////////根據(jù)共線(xiàn)方程由初始外方位元素計(jì)算像點(diǎn)近似值//////////////////
ipx0[i]=X0-f*(a1*(gpx[i]-xs)+b1*(gpy[i]-ys)+c1*(gpz[i]-zs))/(a3*(gpx[i]-xs)+b3*(gpy[i]-ys)+c3*(gpz[i]-zs));
ipy0[i]=Y0-f*(a2*(gpx[i]-xs)+b2*(gpy[i]-ys)+c2*(gpz[i]-zs))/(a3*(gpx[i]-xs)+b3*(gpy[i]-ys)+c3*(gpz[i]-zs));
//////////////////////逐點(diǎn)計(jì)算誤差方程的系數(shù)矩陣A///////////////
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????文件?????262236??2009-11-29?10:47??后方交會(huì)程序\Space?resection\Debug\Spaceresection.exe
?????文件?????304596??2009-11-29?10:47??后方交會(huì)程序\Space?resection\Debug\Spaceresection.ilk
?????文件?????484352??2009-11-29?10:47??后方交會(huì)程序\Space?resection\Debug\Spaceresection.pdb
?????文件??????58368??2010-05-30?21:49??后方交會(huì)程序\Space?resection\Debug\vc60.idb
?????文件??????69632??2009-11-29?10:47??后方交會(huì)程序\Space?resection\Debug\vc60.pdb
?????文件?????343148??2009-11-29?10:47??后方交會(huì)程序\Space?resection\Debug\Spaceresection.pch
?????文件??????40857??2009-11-29?10:47??后方交會(huì)程序\Space?resection\Debug\Spaceresection.obj
?????文件???????2949??2009-10-20?11:51??后方交會(huì)程序\Space?resection\matrixfunction.h
?????文件????????433??2009-11-29?10:47??后方交會(huì)程序\Space?resection\result.txt
?????文件????????244??2009-10-04?15:36??后方交會(huì)程序\Space?resection\sourcefile.txt
?????文件???????8103??2009-10-22?14:17??后方交會(huì)程序\Space?resection\Spaceresection.cpp
?????文件??????41984??2010-05-30?21:50??后方交會(huì)程序\Space?resection\Spaceresection.ncb
?????文件????????902??2009-11-29?10:47??后方交會(huì)程序\Space?resection\Spaceresection.plg
?????文件???????3497??2009-11-29?10:47??后方交會(huì)程序\Space?resection\Spaceresection.dsp
?????文件????????536??2009-11-29?10:47??后方交會(huì)程序\Space?resection\Spaceresection.dsw
?????文件??????53760??2010-05-30?21:50??后方交會(huì)程序\Space?resection\Spaceresection.opt
?????文件????????244??2009-10-04?15:36??后方交會(huì)程序\后方交會(huì)數(shù)據(jù).txt
?????目錄??????????0??2009-10-25?21:11??后方交會(huì)程序\Space?resection\Debug
?????目錄??????????0??2009-10-25?21:11??后方交會(huì)程序\Space?resection
?????目錄??????????0??2009-11-22?09:30??后方交會(huì)程序
-----------?---------??----------?-----??----
??????????????1675841????????????????????20
評(píng)論
共有 條評(píng)論