摄影测量程序汇总(后方交会+前方交会+单模型光束法平差)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(i=0;i<a;i++)
{for(j=0;j<c;j++)
{result[i*c+j]=0;
for(k=0;k<b;k++)
result[i*c+j]+=mat1[i*b+k]*mat2[k*c+j];
}
}
return;
}
double *readdata()
{
FILE *fp;
int i,j;
double *cordata=new double[number*5];
for (i=0;i<number;i++)
{
for (j=0;j<5;j++)
{
fscanf(fp,"%lf",cordata+i*5+j);
}
}
printf("控制点坐标数据读取成功!\n");
return cordata;
{
fprintf(fp,"%7.4lf ",xishuarray[i*5+j]);
}
fprintf(fp,"\n");
}
fprintf(fp,"--------------------------------\n");
fprintf(fp,"---------法方程系数阵为:--------:\n");
}
fprintf(fp,"\n");
}
fprintf(fp,"--------------------------------\n");
fprintf(fp,"---------误差方程系数阵为:--------:\n");
for (int i=0;i<hang*2;i++)
{
for (int j=0;j<6;j++)
-53.4
82.21
37631.08
31324.51
728.69
-14.78
-76.63
39100.97
24934.98
2386.5
10.46
64.43
40426.54
30319.81
757.31
C语言程序:
#include <stdio.h>
#include <math.h>
#include <iostream>
void transpose(double *m1,double *m2,int m,int n);
void inverse(double *a,int n);
void multi(double *mat1,double * mat2,double * result,int a,int b,int c);
void inverse(double *a,int n)/*正定矩阵求逆*/
{
int i,j,k;
for(k=0;k<n;k++)
{
for(i=0;i<n;i++)
{
if(i!=k)
*(a+i*n+k)=-*(a+i*n+k)/(*(a+k*n+k));
}
*(a+k*n+k)=1/(*(a+k*n+k));
double *readdata();
void savedata(int hang,double *data,double *xishuarray,double *faxishu,double *l,int i,double xs,double ys,double zs,double fai,double oumiga,double kapa);
for (int i=0;i<6;i++)
{
for (int j=0;j<6;j++)
{
fprintf(fp,"%7.5lf ",faxishu[i*5+j]);
}
fprintf(fp,"\n");
}
fprintf(fp,"--------------------------------\n");
fprintf(fp,"---------误差方程常数项为:--------:\n");
{
FILE *fp;
char *file1="结算数据.txt";
fp=fopen(file1,"w");
fprintf(fp,"---------原始坐标数据为--------:\n");
for (int i=0;i<hang;i++)
{
for (int j=0;j<5;j++)
{ຫໍສະໝຸດ Baidu
fprintf(fp,"%7.4lf ",data[i*5+j]);
for (int i=0;i<hang*2;i++)
{
fprintf(fp,"%lf ",l[i]);
fprintf(fp,"\n");
int number;
char datacatolog[100];
//scanf("%s",datacatolog);
if ((fp=fopen("控制点坐标.txt","r"))==NULL)
{
printf("读取数据出错!\n");
return false;
}
fscanf(fp,"%d",&number);
{ int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
m2[j*m+i]=m1[i*n+j];
return;
}
void multi(double *mat1,double *mat2,double * result,int a,int b,int c)
{ int i,j,k;
程序运行环境为VisualStudio2010.运行前请先将坐标数据放在debug下。
1.单像空间后方交会
原始数据:
内方位元素
x0(/mm)
y0(/mm)
主距f(/mm)
比例尺分母
0
0
153.24
50000
像点坐标(/mm)
物点坐标(/m)
-86.15
-68.99
36589.41
25273.32
2195.17
}
void savedata(int hang,double *data,double *xishuarray,double *faxishu,double *l,int i,double xs,double ys,double zs,double fai,double oumiga,double kapa)
for(i=0;i<n;i++)
{
if(i!=k)
{
for(j=0;j<n;j++)
{
if(j!=k)
*(a+i*n+j)+=*(a+k*n+j)* *(a+i*n+k);
}
}
}
for(j=0;j<n;j++)
{
if(j!=k)
*(a+k*n+j)*=*(a+k*n+k);
}
}
}
void transpose(double *m1,double *m2,int m,int n) //矩阵转置
{for(j=0;j<c;j++)
{result[i*c+j]=0;
for(k=0;k<b;k++)
result[i*c+j]+=mat1[i*b+k]*mat2[k*c+j];
}
}
return;
}
double *readdata()
{
FILE *fp;
int i,j;
double *cordata=new double[number*5];
for (i=0;i<number;i++)
{
for (j=0;j<5;j++)
{
fscanf(fp,"%lf",cordata+i*5+j);
}
}
printf("控制点坐标数据读取成功!\n");
return cordata;
{
fprintf(fp,"%7.4lf ",xishuarray[i*5+j]);
}
fprintf(fp,"\n");
}
fprintf(fp,"--------------------------------\n");
fprintf(fp,"---------法方程系数阵为:--------:\n");
}
fprintf(fp,"\n");
}
fprintf(fp,"--------------------------------\n");
fprintf(fp,"---------误差方程系数阵为:--------:\n");
for (int i=0;i<hang*2;i++)
{
for (int j=0;j<6;j++)
-53.4
82.21
37631.08
31324.51
728.69
-14.78
-76.63
39100.97
24934.98
2386.5
10.46
64.43
40426.54
30319.81
757.31
C语言程序:
#include <stdio.h>
#include <math.h>
#include <iostream>
void transpose(double *m1,double *m2,int m,int n);
void inverse(double *a,int n);
void multi(double *mat1,double * mat2,double * result,int a,int b,int c);
void inverse(double *a,int n)/*正定矩阵求逆*/
{
int i,j,k;
for(k=0;k<n;k++)
{
for(i=0;i<n;i++)
{
if(i!=k)
*(a+i*n+k)=-*(a+i*n+k)/(*(a+k*n+k));
}
*(a+k*n+k)=1/(*(a+k*n+k));
double *readdata();
void savedata(int hang,double *data,double *xishuarray,double *faxishu,double *l,int i,double xs,double ys,double zs,double fai,double oumiga,double kapa);
for (int i=0;i<6;i++)
{
for (int j=0;j<6;j++)
{
fprintf(fp,"%7.5lf ",faxishu[i*5+j]);
}
fprintf(fp,"\n");
}
fprintf(fp,"--------------------------------\n");
fprintf(fp,"---------误差方程常数项为:--------:\n");
{
FILE *fp;
char *file1="结算数据.txt";
fp=fopen(file1,"w");
fprintf(fp,"---------原始坐标数据为--------:\n");
for (int i=0;i<hang;i++)
{
for (int j=0;j<5;j++)
{ຫໍສະໝຸດ Baidu
fprintf(fp,"%7.4lf ",data[i*5+j]);
for (int i=0;i<hang*2;i++)
{
fprintf(fp,"%lf ",l[i]);
fprintf(fp,"\n");
int number;
char datacatolog[100];
//scanf("%s",datacatolog);
if ((fp=fopen("控制点坐标.txt","r"))==NULL)
{
printf("读取数据出错!\n");
return false;
}
fscanf(fp,"%d",&number);
{ int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
m2[j*m+i]=m1[i*n+j];
return;
}
void multi(double *mat1,double *mat2,double * result,int a,int b,int c)
{ int i,j,k;
程序运行环境为VisualStudio2010.运行前请先将坐标数据放在debug下。
1.单像空间后方交会
原始数据:
内方位元素
x0(/mm)
y0(/mm)
主距f(/mm)
比例尺分母
0
0
153.24
50000
像点坐标(/mm)
物点坐标(/m)
-86.15
-68.99
36589.41
25273.32
2195.17
}
void savedata(int hang,double *data,double *xishuarray,double *faxishu,double *l,int i,double xs,double ys,double zs,double fai,double oumiga,double kapa)
for(i=0;i<n;i++)
{
if(i!=k)
{
for(j=0;j<n;j++)
{
if(j!=k)
*(a+i*n+j)+=*(a+k*n+j)* *(a+i*n+k);
}
}
}
for(j=0;j<n;j++)
{
if(j!=k)
*(a+k*n+j)*=*(a+k*n+k);
}
}
}
void transpose(double *m1,double *m2,int m,int n) //矩阵转置