摄影测量后方交会VC实现代码及实习报告
时间:2025-05-11
时间:2025-05-11
摄影测量课间实习
单片空间后方交会
班级:09031
姓名:吴煜晖
学号:2009302590123
2011-10-8
遥感信息工程学院 09031班 2009302590123 吴煜晖
1 一、实习原理
单像空间后方交会的基本思想是:以单幅影像为基础,从该影像所覆盖地面范围内若干控制点的已知地面坐标和相应点的像坐标测值出发,根据共线条件方程,解求该影像在航空摄影时刻的外方位元素X S ,Y S ,Z S ,ψ,ω,κ。
由于空间后方交会所采用的数学模型共线方程是非线性函数,为了便于外方位元素的解求,须首先对共线方程进行线性化,然后进行后方交会,最后在精度评定。
二、实习过程
1、实习所用数据
本次实习数据采用课本P.44 27题所给数据。如下图:
2、程序流程图及界面设计
遥感信息工程学院09031班2009302590123 吴煜晖本程序程序框图如下:
2
遥感信息工程学院09031班2009302590123 吴煜晖
本人采用Visual C++6.0编此程序,利用MFC来设计程序。主程序页面设计如下:
子窗口(即进行计算后所得结果页面)设计如下:
3
遥感信息工程学院09031班2009302590123 吴煜晖
3、程序代码
本程序代码较多,在此讲部分重要代码列出,其余代码参见程序源代码。
对话框类头文件内声明的类成员及函数(后来增加的):
public:
void houfangjiaohui();
double fi,w,k; //影像外方位角
double Xs0,Ys0,Zs0; //后方交会所求解
double a[3],b[3],c[3];
double mx[6],m0;
void inv(double *a,int n); /*正定矩阵求逆*/
void transpose(double *m1, double *m2, int m, int n); //矩阵转置
void mult(double *m1, double *m2, double *result, int i_1, int j_12, int j_2); //矩阵相乘
部分核心代码,在此讲后方交会计算代码给出:
void CFinalworkDlg::houfangjiaohui()
{
double t_fk;
fi=w=k=0.0;
int i; //中间变量
double t_x[4],t_y[4],t_X[4],t_Y[4],t_Z[4];
//将单位换成米
t_x[0]=m_x1/1000.0; t_x[1]=m_x2/1000.0; t_x[2]=m_x3/1000.0;
t_x[3]=m_x4/1000.0;
t_y[0]=m_y1/1000.0; t_y[1]=m_y2/1000.0; t_y[2]=m_y3/1000.0;
t_y[3]=m_y4/1000.0;
t_X[0]=m_X1; t_X[1]=m_X2; t_X[2]=m_X3; t_X[3]=m_X4;
t_Y[0]=m_Y1; t_Y[1]=m_Y2; t_Y[2]=m_Y3; t_Y[3]=m_Y4;
t_Z[0]=m_Z1; t_Z[1]=m_Z2; t_Z[2]=m_Z3; t_Z[3]=m_Z4;
Xs0=Ys0=Zs0=0.0;
for(i=0;i<4;i++)
{
Xs0+=t_X[i];
Ys0+=t_Y[i];
}
//确定未知数初始值
Xs0/=4;
Ys0/=4;
t_fk=m_fk/1000.0;
Zs0=t_fk*m_mk;
double x00=m_x00;
double y00=m_y00;
4
遥感信息工程学院09031班2009302590123 吴煜晖
double A[8*6];
double AT[6*8];
double ATA[6*6];
double L[8];
double ATL[6*1];
double Xo[4],Yo[4],Zo[4],Xom,Yom,Zom;
double Delta[6];
while(1)
{
a[0]=cos(fi)*cos(k)-sin(fi)*sin(w)*sin(k);
a[1]=-cos(fi)*sin(k)-sin(fi)*sin(w)*cos(k);
a[2]=-sin(fi)*cos(w);
b[0]=cos(w)*sin(k);
b[1]=cos(w)*cos(k);
b[2]=-sin(w);
c[0]=sin(fi)*cos(k)+cos(fi)*sin(w)*sin(k);
c[1]=-sin(fi)*sin(k)+cos(fi)*sin(w)*cos(k);
c[2]=cos(fi)*cos(w);
for(i=0;i<4;i++)
{
Xom=a[0]*(t_X[i]-Xs0)+b[0]*(t_Y[i]-Ys0)+c[0]*(t_Z[i]-Zs0);
Yom=a[1]*(t_X[i]-Xs0)+b[1]*(t_Y[i]-Ys0)+c[1]*(t_Z[i]-Zs0);
Zom=a[2]*(t_X[i]-Xs0)+b[2]*(t_Y[i]-Ys0)+c[2]*(t_Z[i]-Zs0);
Xo[i]=-t_fk*Xom/Zom;
Yo[i]=-t_fk*Yom/Zom;
Zo[i]=Zom;
A[i*12+0]=(a[0]*t_fk+a[2]*(t_x[i]-x00))/Zo[i];
A[i*12+1]=(b[0]*t_fk+b[2]*(t_x[i]-x00))/Zo[i];
A[i*12+2]=(c[0]*t_fk+c[2]*(t_x[i]-x00))/Zo[i];
A[i*12+3]=(t_y[i]-y00)*sin(w)-cos(w)*(t_fk*cos(k)+((t_x[i]-x00)*cos(k)-(t _y[i]-y00)*sin(k))*(t_x[i]-x00)/t_fk);
A[i*12+4]=-t_fk*sin(k)-(t_x[i]-x00)*((t_x[i]-x00)*sin(k)+(t_y[i]-y00)*cos(k ))/t_fk;
A[i*12+5]=t_y[i]-y00;
A[i*12+6]=(a[1]*t_fk+a[2]*(t_y[i]-y00))/Zo[i];
A[i*12+7]=(b[1]*t_fk+b[2]*(t_y[i]-y00))/Zo[i];
A[i*12+8]=(c[1]*t_fk+c[2]*(t_y[i]-y00))/Zo[i];
A[i*12+9]=-(t_x[i]-x00)*sin(w)-((t_y[i]-y00)*((t_x[i]-x00)*cos(k)-(t_y[i]-y0 0)*sin(k))/t_fk-t_fk*sin(k))*cos(w);
A[i*12+10]=-t_fk*cos(k)-(t_y[i]-y00)*((t_x[i]-x00)*sin(k)+(t_y[i]-y00)*cos
5
遥感信息工程学院09031班2009302590123 吴煜晖
(k))/t_fk;
A[i*12+11]=-(t_x[i]-x00);
L[i*2+0]=(t_x[i]-x00-Xo[i]);
L[i*2+1]=(t_y[i]-y00-Yo[i]);
}
transpose(A,AT,8,6);
mult(AT,A,ATA,6,8,6);
mult(AT,L,ATL,6,8,1);
inv(ATA,6);
mult(ATA,ATL,Delta,6,6,1);
Xs0+=Delta[0];
Ys0+=Delta[1];
Zs0+=Delta[2];
fi+=Delta[3];
w+=Delta[4];
k+=Delta[5];
if((fabs(Delta[0])>0.00001||fabs(Delta[1])>0.00001||fabs(Delta[2])>0.00001|| fabs(Delta[3])>0.00001||fabs(Delta[4])>0.00001||fabs(Delta[5])>0.00001)==0) {
double V[8];
double s=0.0;
mult(A,Delta,V,8,6,1);
for(i=0;i<8;i++)
{
V[i]-=L[i];
s+=V[i]*V[i];
}
m0=sqrt(s/2.0); //单位权中误差
for(i=0;i<6;i++) //精度评定
{
mx[i]=sqrt(ATA[7*i])*m0;
}
break;
}
}
}
6
遥感信息工程学院 09031班 2009302590123 吴煜晖
7 三、实习结果
程序主界面如下:
在该界面中,我们可以手动输入各项数据,也可以清空所有数据以及将所有空恢复默认数据(即题目所给数据)。
点击计算键后进入结果显示界面:
遥感信息工程学院09031班2009302590123 吴煜晖点击保存结果后,出现如下对话框:
在工作区文件夹出现result.txt,其内记载了计算 …… 此处隐藏:1808字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:解析关于韩非的法治思想(上)