资源简介
简单的利用C++程序语言编写的空间后方交会程序
代码片段和文件信息
//单张相片的空间后方交会程序
//说明:程序未作底片变形系统误差改正,像点坐标直接使用且内方位元素X0=Y0=0像点坐标为等精度不相关观测值
#include
#include //标准输出输入流
#include //用于数学计算
#include //调用函数exit()需包含此文件
#include //控制输出格式需包含此文件
#include “matrixfunction.h“//矩阵运算头文件
int N=4;//控制点总数
/////////////////////////////////读入数据函数/////////////////////////////////////////
void getdata(char *filenamedouble *xdouble *ydouble *x1double *y1double *z1)
//读取数据文件(文件名,像x,像y,物x1,物y1,物z1)
{
ifstream filein(filenameios::in|ios::nocreate);
// 以输入方式打开一个文件,ios::nocreate表示原文件不存在时,不创建
if(!filein)
{ cout<<“打开文件失败!文件可能不存在!“< exit(1);
}
for(int i=0;i filein>>x[i]>>y[i]>>x1[i]>>y1[i]>>z1[i];//读入每行(每个控制点)的像方和物方坐标
filein.close();
}
int main()
{
int ij;//循环所用辅助参数
double a1a2a3b1b2b3c1c2c3;//旋转矩阵九个元素
double f=153.24;//摄影机主距(mm)
double X0=0; double Y0=0;//内方位元素为0
double M=50000;//摄影比例尺分母
double xsyszsfaiomgkaf;//6个外方位元素
double *A=new double [2*N*6];//存放外方位元素系数A的矩阵2i*6
double det[6];//6个外方位元素改正值矩阵
double *L=new double [2*N];
double *gpx=new double [N];double *gpy=new double [N];double *gpz=new double [N];//存储控制点物方坐标
double *ipx=new double [N];double *ipy=new double [N];//存储控制点像方坐标
double *ipx0=new double [N];double *ipy0=new double [N];//存储由共线条件解算的近似像点坐标
double *AT=new double[2*N*6];//存储外方位元素系数转置矩阵AT6*2i
double *TEP1=new double[36];double *TEP2=new double[6];double *TEP3=new double [36];//中间临时矩阵
double Q[6];//存储6个权倒数
double *V=new double [2*N];//存储像点观测值改正数
double Vsum=0m0;//单位权中误差
double m[6];//存储六个外方位元素的中误差
////////////////////////读入观测数据/////////////////////////////
getdata(“sourcefile.txt“ipxipygpxgpygpz);
////////////////////////确定未知数的初始值////////////////////////
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分换算成的弧度值
{
/////////////////计算旋转矩阵
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);
///////////////////////////逐点计算///////////////////////////
for (i=0;i {
////////////////根据共线方程由初始外方位元素计算像点近似值//////////////////
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));
//////////////////////逐点计算误差方程的系数矩阵A///////////////
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 262236 2009-11-29 10:47 后方交会程序\Space resection\Debug\Spaceresection.exe
文件 304596 2009-11-29 10:47 后方交会程序\Space resection\Debug\Spaceresection.ilk
文件 484352 2009-11-29 10:47 后方交会程序\Space resection\Debug\Spaceresection.pdb
文件 58368 2010-05-30 21:49 后方交会程序\Space resection\Debug\vc60.idb
文件 69632 2009-11-29 10:47 后方交会程序\Space resection\Debug\vc60.pdb
文件 343148 2009-11-29 10:47 后方交会程序\Space resection\Debug\Spaceresection.pch
文件 40857 2009-11-29 10:47 后方交会程序\Space resection\Debug\Spaceresection.obj
文件 2949 2009-10-20 11:51 后方交会程序\Space resection\matrixfunction.h
文件 433 2009-11-29 10:47 后方交会程序\Space resection\result.txt
文件 244 2009-10-04 15:36 后方交会程序\Space resection\sourcefile.txt
文件 8103 2009-10-22 14:17 后方交会程序\Space resection\Spaceresection.cpp
文件 41984 2010-05-30 21:50 后方交会程序\Space resection\Spaceresection.ncb
文件 902 2009-11-29 10:47 后方交会程序\Space resection\Spaceresection.plg
文件 3497 2009-11-29 10:47 后方交会程序\Space resection\Spaceresection.dsp
文件 536 2009-11-29 10:47 后方交会程序\Space resection\Spaceresection.dsw
文件 53760 2010-05-30 21:50 后方交会程序\Space resection\Spaceresection.opt
文件 244 2009-10-04 15:36 后方交会程序\后方交会数据.txt
目录 0 2009-10-25 21:11 后方交会程序\Space resection\Debug
目录 0 2009-10-25 21:11 后方交会程序\Space resection
目录 0 2009-11-22 09:30 后方交会程序
----------- --------- ---------- ----- ----
1675841 20
- 上一篇:智能循迹避障小车源程序C51
- 下一篇:C++ MongoDB 连接池代码实现
评论
共有 条评论