空间后方交会C++程序代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摄影测量后方交会程序(c/c++)输入数据截图:

结果截图:

程序源代码(其中的矩阵求逆在前面已经有了,链接):

#include

#include

#include

const double PRECISION=1e-5;

typedef double DOUBLE[5];

int InputData(int &Num, DOUBLE *&Data,double &m,double &f);

int Resection(const int &Num,const DOUBLE *&Data,const double &m,const double &f);

int InverseMatrix(double *matrix,const int &row);

int main(int argc, char* argv[])

{

DOUBLE *Data=NULL;

int Num;

double f(0),m(0);

if(InputData(Num,Data,m,f))

{

if (Data!=NULL)

{

delete []Data;

}

return 1;

}

if(Resection(Num,Data,m,f))

{

if (Data!=NULL)

{

delete []Data;

}

return 1;

}

if (Data!=NULL)

{

delete []Data;

}

printf("解算完毕...\n");

do{

printf("计算结果保存于\"结果.txt\"文件中\n"

"请选择操作(输入P打开结果数据,R打开原始数据,其它退出程序):");

fflush(stdin); //刷新输入流

char order=getchar();

if ('P'==order || 'p'==order)

{

system("结果.txt");

}

else if ('R'==order || 'r'==order)

{

system("data.txt");

}

else

break;

system("cls");

}while(1);

system("PAUSE");

return 0;

}

/**********************************************

*函数名:InputData

*函数介绍:从文件(data.txt)中读取数据,

*文件格式如下:

*点数 m(未知写作0)

* 内方位元素(f x0 y0)

*编号 x y X Y Z

*下面是一个实例:

4 0

153.24 0 0

1 -86.15 -68.99 36589.41 25273.3

2 2195.17

2 -53.40 82.21 37631.08 31324.51 728.69

3 -14.78 -76.63 39100.97 24934.98 2386.50

4 10.46 64.43 40426.54 30319.81 757.31

*参数:(in/out)Num(点数),

*(in/out)Data(存放数据),m,f,x0,y0

*返回值:int ,0成功,1文件打开失败,2控制点个

*数不足,3文件格式错误

*作者:vcrs

*完成时间:09-10-4

**********************************************/

int InputData(int &Num, DOUBLE *&Data,double &m,double &f) {

double x0,y0;

FILE *fp_input;

if (!(fp_input=fopen("data.txt","r")))

{

return 1;

}

fscanf(fp_input,"%d%lf",&Num,&m);

if (Num<4)

{

return 2;

}

fscanf(fp_input,"%lf%lf%lf",&f,&x0,&y0);

f/=1000;

if (m<0 || f<0)

{

return 3;

}

Data=new DOUBLE[Num];

double *temp= new double[Num-1];

double scale=0;

int i;

for (i=0;i

{

//读取数据,忽略编号

if(fscanf(fp_input,"%*d%lf%lf%lf%lf%lf",

&Data[i][0],&Data[i][1],&Data[i][2],

&Data[i][3],&Data[i][4])!=5)

{

return 3;

}

//单位换算成m

Data[i][0]/=1000.0;

Data[i][1]/=1000.0;

}

//如果m未知则归算其值

if (0==m)

{

for (i=0;i

{

temp[i]=(Data[i][2]-Data[i+1][2])/(Data[i][0]-Data[i+1][0])+ (Data[i][3]-Data[i+1][3])/(Data[i][1]-Data[i+1][1]);

scale+=temp[i]/2.0;

}

m=scale/(Num-1);

}

fclose(fp_input);

delete []temp;

return 0;

}

相关文档
最新文档