⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rpc1dlg.cpp

📁 高精度遥感处理算法(RPC正解)
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	fin>>temp0>>Xs_L>>temp01;
	fin>>temp0>>Ys_L>>temp01;
	fin>>temp0>>Zs_L>>temp01;
	temp0=NULL;
	temp01=NULL;

//将左影像RPC文件中的多项式P1_L的20个参数读入数组a_L[i](i=0、1……19)中

	char *temp1;                                                      //读取参数的临时字符串变量
	temp1=new char[20];
	for(int i=0;i<20;i++)
	{
		fin>>temp1>>a_L[i];
	}

 	temp1=NULL;                                                       //释放指针temp1
		
//将左影像RPC文件中的多项式P2_L的20个参数读入数组b_L[i](i=0、1……19)中

	char *temp2;
	temp2=new char[20];
	for(int j=0;j<20;j++)
	{
		fin>>temp2>>b_L[j];
	}

	temp2=NULL;                                                      //释放指针temp2

//将左影像RPC文件中的多项式P3_L的20个参数读入数组c_L[i](i=0、1……19)中
	char *temp3;
	temp3=new char[20];
	for(int m=0;m<20;m++)
	{
		fin>>temp3>>c_L[m];
	}

	temp3=NULL;                                                      //释放指针temp3

//将左影像RPC文件中的多项式P4_L的20个参数读入数组d_L[i](i=0、1……19)中

	char *temp4;
	temp4=new char[20];
	for(int n=0;n<20;n++)
	{
		fin>>temp4>>d_L[n];
	}
	
	temp4=NULL;                                                      //释放指针temp4

	fin.close();
}

//*********************************读取右影像RPC文件*****************************************//

void CRPC1Dlg::Read_right_file()
{
	a_R=new double[20];
	b_R=new double[20];
	c_R=new double[20];
	d_R=new double[20];
	ifstream fin(m_Path_Right);
	char *temp0,*temp01;                                             //读取参数的临时字符串变量
	temp0=new char[20];
	temp01=new char[20];
	fin >>temp0>>r0_R>>temp01;
	fin >>temp0>>c0_R>>temp01;
	fin >>temp0>>X0_R>>temp01;
	fin >>temp0>>Y0_R>>temp01;
	fin >>temp0>>Z0_R>>temp01;
	fin >>temp0>>rs_R>>temp01;
	fin >>temp0>>cs_R>>temp01;
	fin >>temp0>>Xs_R>>temp01;
	fin >>temp0>>Ys_R>>temp01;
	fin >>temp0>>Zs_R>>temp01;
	temp0=NULL;
	temp01=NULL;

//将右影像RPC文件中的多项式P1_L的20个参数读入数组a_R[i](i=0、1……19)中
	
	char *temp1;                                                     //读取参数的临时字符串变量
	temp1=new char[20];
	for(int i=0;i<20;i++)
	{
		fin>>temp1>>a_R[i];
	}
	
	temp1=NULL;                                                      //释放指针temp1

//将右影像RPC文件中的多项式P2_L的20个参数读入数组b_R[i](i=0、1……19)中
	
	char *temp2;                                                     //读取参数的临时字符串变量
	temp2=new char[20];
	for(int j=0;j<20;j++)
	{
		fin>>temp2>>b_R[j];
	}

	temp2=NULL;                                                      //释放指针temp2

//将右影像RPC文件中的多项式P3_L的20个参数读入数组c_R[i](i=0、1……19)中

	char *temp3;                                                     //读取参数的临时字符串变量
	temp3=new char[20];
	for(int m=0;m<20;m++)
	{
		
		fin>>temp3>>c_R[m];
	}

	temp3=NULL;                                                       //释放指针temp3

//将右影像RPC文件中的多项式P4_L的20个参数读入数组d_R[i](i=0、1……19)中

	char *temp4;                                                     //读取参数的临时字符串变量
	temp4=new char[20];
	for(int n=0;n<20;n++)
	{	
		fin>>temp4>>d_R[n];
	}
	temp4=NULL;                                                       //释放指针temp4
	fin.close();
}

//****************************************计 算************************************************//

//X0、Y0、Z0分别为初始地面坐标

bool CRPC1Dlg::comput(double X0,double Y0,double Z0)
{
//////////////////////////////////定义变量////////////////////////////////////////
	//分别为左、右影像的RPC多项式
	double P1_L,P2_L,P3_L,P4_L,P1_R,P2_R,P3_R,P4_R; 
	
	//左、右影像的RPC多项式分别对Xn求导
	double dP1_L_dXn,dP2_L_dXn,dP3_L_dXn,dP4_L_dXn,dP1_R_dXn,dP2_R_dXn,dP3_R_dXn,dP4_R_dXn; 

	//左、右影像的RPC多项式分别对Yn求导
	double dP1_L_dYn,dP2_L_dYn,dP3_L_dYn,dP4_L_dYn,dP1_R_dYn,dP2_R_dYn,dP3_R_dYn,dP4_R_dYn; 
	
	//左、右影像的RPC多项式分别对Zn求导
	double dP1_L_dZn,dP2_L_dZn,dP3_L_dZn,dP4_L_dZn,dP1_R_dZn,dP2_R_dZn,dP3_R_dZn,dP4_R_dZn;

	//左、右影像的同名点行、列坐标分别对X、Y、Z求导
	double dr_L_dX,dr_L_dY,dr_L_dZ,dr_R_dX,dr_R_dY,dr_R_dZ,dc_L_dX,dc_L_dY,dc_L_dZ,dc_R_dX,dc_R_dY,dc_R_dZ;

	//定义矩阵各种运算的类CMatrix的对象,用于计算过程的矩阵运算
	CMatrix A(4,3),L(4,1),dX(3,1);

	//左、右影像同名点行、列初始坐标似然值
	double row_L_si,row_R_si,col_L_si,col_R_si;
	
///////////////////将初始地面坐标X0、Y0、Z0和左、右影像的同名点行、列坐标进行标准化////////////////////
	
	Xn_L=(X0-X0_L)/Xs_L;Yn_L=(Y0-Y0_L)/Ys_L;Zn_L=(Z0-Z0_L)/Zs_L;
	Xn_R=(X0-X0_R)/Xs_R;Yn_R=(Y0-Y0_R)/Ys_R;Zn_R=(Z0-Z0_R)/Zs_R;
	rn_L=(row_L-r0_L)/rs_L;cn_L=(col_L-c0_L)/cs_L;
	rn_R=(row_R-r0_R)/rs_R;cn_R=(col_R-c0_R)/cs_R;
	
///////////////////将系数代入左、右影像的RPC多项式并进行计算//////////////////////////////////////////
	P1_L=a_L[0]+a_L[1]*Zn_L+a_L[2]*Yn_L+a_L[3]*Xn_L+a_L[4]*Zn_L*Yn_L+a_L[5]*Zn_L*Xn_L+
		 a_L[6]*Yn_L*Xn_L+a_L[7]*Zn_L*Zn_L+a_L[8]*Yn_L*Yn_L+a_L[9]*Xn_L*Xn_L+a_L[10]*
		 Zn_L*Yn_L*Xn_L+a_L[11]*Zn_L*Zn_L*Yn_L+a_L[12]*Zn_L*Zn_L*Xn_L+a_L[13]*Yn_L*Yn_L*Zn_L+
		 a_L[14]*Yn_L*Yn_L*Xn_L+a_L[15]*Zn_L*Xn_L*Xn_L+a_L[16]*Yn_L*Xn_L*Xn_L+a_L[17]*Zn_L*Zn_L*Zn_L+
		 a_L[18]*Yn_L*Yn_L*Yn_L+a_L[19]*Xn_L*Xn_L*Xn_L;

	P2_L=b_L[0]+b_L[1]*Zn_L+b_L[2]*Yn_L+b_L[3]*Xn_L+b_L[4]*Zn_L*Yn_L+b_L[5]*Zn_L*Xn_L+
		 b_L[6]*Yn_L*Xn_L+b_L[7]*Zn_L*Zn_L+b_L[8]*Yn_L*Yn_L+b_L[9]*Xn_L*Xn_L+b_L[10]*
	 	 Zn_L*Yn_L*Xn_L+b_L[11]*Zn_L*Zn_L*Yn_L+b_L[12]*Zn_L*Zn_L*Xn_L+b_L[13]*Yn_L*Yn_L*Zn_L+
		 b_L[14]*Yn_L*Yn_L*Xn_L+b_L[15]*Zn_L*Xn_L*Xn_L+b_L[16]*Yn_L*Xn_L*Xn_L+b_L[17]*Zn_L*Zn_L*Zn_L+
		 b_L[18]*Yn_L*Yn_L*Yn_L+b_L[19]*Xn_L*Xn_L*Xn_L;
	
	P3_L=c_L[0]+c_L[1]*Zn_L+c_L[2]*Yn_L+c_L[3]*Xn_L+c_L[4]*Zn_L*Yn_L+c_L[5]*Zn_L*Xn_L+
		 c_L[6]*Yn_L*Xn_L+c_L[7]*Zn_L*Zn_L+c_L[8]*Yn_L*Yn_L+c_L[9]*Xn_L*Xn_L+c_L[10]*
		 Zn_L*Yn_L*Xn_L+c_L[11]*Zn_L*Zn_L*Yn_L+c_L[12]*Zn_L*Zn_L*Xn_L+c_L[13]*Yn_L*Yn_L*Zn_L+
		 c_L[14]*Yn_L*Yn_L*Xn_L+c_L[15]*Zn_L*Xn_L*Xn_L+c_L[16]*Yn_L*Xn_L*Xn_L+c_L[17]*Zn_L*Zn_L*Zn_L+
		 c_L[18]*Yn_L*Yn_L*Yn_L+c_L[19]*Xn_L*Xn_L*Xn_L;

	P4_L=d_L[0]+d_L[1]*Zn_L+d_L[2]*Yn_L+d_L[3]*Xn_L+d_L[4]*Zn_L*Yn_L+d_L[5]*Zn_L*Xn_L+
		 d_L[6]*Yn_L*Xn_L+d_L[7]*Zn_L*Zn_L+d_L[8]*Yn_L*Yn_L+d_L[9]*Xn_L*Xn_L+d_L[10]*
		 Zn_L*Yn_L*Xn_L+d_L[11]*Zn_L*Zn_L*Yn_L+d_L[12]*Zn_L*Zn_L*Xn_L+d_L[13]*Yn_L*Yn_L*Zn_L+
		 d_L[14]*Yn_L*Yn_L*Xn_L+d_L[15]*Zn_L*Xn_L*Xn_L+d_L[16]*Yn_L*Xn_L*Xn_L+d_L[17]*Zn_L*Zn_L*Zn_L+
		 d_L[18]*Yn_L*Yn_L*Yn_L+d_L[19]*Xn_L*Xn_L*Xn_L;

	P1_R=a_R[0]+a_R[1]*Zn_R+a_R[2]*Yn_R+a_R[3]*Xn_R+a_R[4]*Zn_R*Yn_R+a_R[5]*Zn_R*Xn_R+
		 a_R[6]*Yn_R*Xn_R+a_R[7]*Zn_R*Zn_R+a_R[8]*Yn_R*Yn_R+a_R[9]*Xn_R*Xn_R+a_R[10]*
		 Zn_R*Yn_R*Xn_R+a_R[11]*Zn_R*Zn_R*Yn_R+a_R[12]*Zn_R*Zn_R*Xn_R+a_R[13]*Yn_R*Yn_R*Zn_R+
		 a_R[14]*Yn_R*Yn_R*Xn_R+a_R[15]*Zn_R*Xn_R*Xn_R+a_R[16]*Yn_R*Xn_R*Xn_R+a_R[17]*Zn_R*Zn_R*Zn_R+
		 a_R[18]*Yn_R*Yn_R*Yn_R+a_R[19]*Xn_R*Xn_R*Xn_R;

	P2_R=b_R[0]+b_R[1]*Zn_R+b_R[2]*Yn_R+b_R[3]*Xn_R+b_R[4]*Zn_R*Yn_R+b_R[5]*Zn_R*Xn_R+
		 b_R[6]*Yn_R*Xn_R+b_R[7]*Zn_R*Zn_R+b_R[8]*Yn_R*Yn_R+b_R[9]*Xn_R*Xn_R+b_R[10]*
		 Zn_R*Yn_R*Xn_R+b_R[11]*Zn_R*Zn_R*Yn_R+b_R[12]*Zn_R*Zn_R*Xn_R+b_R[13]*Yn_R*Yn_R*Zn_R+
		 b_R[14]*Yn_R*Yn_R*Xn_R+b_R[15]*Zn_R*Xn_R*Xn_R+b_R[16]*Yn_R*Xn_R*Xn_R+b_R[17]*Zn_R*Zn_R*Zn_R+
		 b_R[18]*Yn_R*Yn_R*Yn_R+b_R[19]*Xn_R*Xn_R*Xn_R;

	P3_R=c_R[0]+c_R[1]*Zn_R+c_R[2]*Yn_R+c_R[3]*Xn_R+c_R[4]*Zn_R*Yn_R+c_R[5]*Zn_R*Xn_R+
		 c_R[6]*Yn_R*Xn_R+c_R[7]*Zn_R*Zn_R+c_R[8]*Yn_R*Yn_R+c_R[9]*Xn_R*Xn_R+c_R[10]*
		 Zn_R*Yn_R*Xn_R+c_R[11]*Zn_R*Zn_R*Yn_R+c_R[12]*Zn_R*Zn_R*Xn_R+c_R[13]*Yn_R*Yn_R*Zn_R+
		 c_R[14]*Yn_R*Yn_R*Xn_R+c_R[15]*Zn_R*Xn_R*Xn_R+c_R[16]*Yn_R*Xn_R*Xn_R+c_R[17]*Zn_R*Zn_R*Zn_R+
		 c_R[18]*Yn_R*Yn_R*Yn_R+c_R[19]*Xn_R*Xn_R*Xn_R;

	P4_R=d_R[0]+d_R[1]*Zn_R+d_R[2]*Yn_R+d_R[3]*Xn_R+d_R[4]*Zn_R*Yn_R+d_R[5]*Zn_R*Xn_R+
		 d_R[6]*Yn_R*Xn_R+d_R[7]*Zn_R*Zn_R+d_R[8]*Yn_R*Yn_R+d_R[9]*Xn_R*Xn_R+d_R[10]*
		 Zn_R*Yn_R*Xn_R+d_R[11]*Zn_R*Zn_R*Yn_R+d_R[12]*Zn_R*Zn_R*Xn_R+d_R[13]*Yn_R*Yn_R*Zn_R+
		 d_R[14]*Yn_R*Yn_R*Xn_R+d_R[15]*Zn_R*Xn_R*Xn_R+d_R[16]*Yn_R*Xn_R*Xn_R+d_R[17]*Zn_R*Zn_R*Zn_R+
		 d_R[18]*Yn_R*Yn_R*Yn_R+d_R[19]*Xn_R*Xn_R*Xn_R;
	
///////////////////////////////分别由左、右影像的RPC多项式对Xn、Yn、Zn进行求导//////////////////////////

	dP1_L_dXn=a_L[3]+a_L[5]*Zn_L+a_L[6]*Yn_L+2*a_L[9]*Xn_L+a_L[10]*Zn_L*Yn_L+a_L[12]*Zn_L*Zn_L+
		      a_L[14]*Yn_L*Yn_L+2*a_L[15]*Zn_L*Xn_L+2*a_L[16]*Yn_L*Xn_L+3*a_L[19]*Xn_L*Xn_L;
	dP2_L_dXn=b_L[3]+b_L[5]*Zn_L+b_L[6]*Yn_L+2*b_L[9]*Xn_L+b_L[10]*Zn_L*Yn_L+b_L[12]*Zn_L*Zn_L+
		      b_L[14]*Yn_L*Yn_L+2*b_L[15]*Zn_L*Xn_L+2*b_L[16]*Yn_L*Xn_L+3*b_L[19]*Xn_L*Xn_L;
    dP3_L_dXn=c_L[3]+c_L[5]*Zn_L+c_L[6]*Yn_L+2*c_L[9]*Xn_L+c_L[10]*Zn_L*Yn_L+c_L[12]*Zn_L*Zn_L+
		      c_L[14]*Yn_L*Yn_L+2*c_L[15]*Zn_L*Xn_L+2*c_L[16]*Yn_L*Xn_L+3*c_L[19]*Xn_L*Xn_L;
	dP4_L_dXn=d_L[3]+d_L[5]*Zn_L+d_L[6]*Yn_L+2*d_L[9]*Xn_L+d_L[10]*Zn_L*Yn_L+d_L[12]*Zn_L*Zn_L+
		      d_L[14]*Yn_L*Yn_L+2*d_L[15]*Zn_L*Xn_L+2*d_L[16]*Yn_L*Xn_L+3*d_L[19]*Xn_L*Xn_L;
	
	dP1_L_dYn=a_L[2]+a_L[4]*Zn_L+a_L[6]*Xn_L+2*a_L[8]*Yn_L+a_L[10]*Zn_L*Xn_L+a_L[11]*Zn_L*Zn_L+
		      2*a_L[13]*Yn_L*Zn_L+2*a_L[14]*Yn_L*Xn_L+a_L[16]*Xn_L*Xn_L+3*a_L[18]*Yn_L*Yn_L;
	dP2_L_dYn=c_L[2]+c_L[4]*Zn_L+c_L[6]*Xn_L+2*c_L[8]*Yn_L+c_L[10]*Zn_L*Xn_L+c_L[11]*Zn_L*Zn_L+
		      2*c_L[13]*Yn_L*Zn_L+2*c_L[14]*Yn_L*Xn_L+c_L[16]*Xn_L*Xn_L+3*c_L[18]*Yn_L*Yn_L;
	dP3_L_dYn=c_L[2]+c_L[4]*Zn_L+c_L[6]*Xn_L+2*c_L[8]*Yn_L+c_L[10]*Zn_L*Xn_L+c_L[11]*Zn_L*Zn_L+
		      2*c_L[13]*Yn_L*Zn_L+2*c_L[14]*Yn_L*Xn_L+c_L[16]*Xn_L*Xn_L+3*c_L[18]*Yn_L*Yn_L;
	dP4_L_dYn=d_L[2]+d_L[4]*Zn_L+d_L[6]*Xn_L+2*d_L[8]*Yn_L+d_L[10]*Zn_L*Xn_L+d_L[11]*Zn_L*Zn_L+
		      2*d_L[13]*Yn_L*Zn_L+2*d_L[14]*Yn_L*Xn_L+d_L[16]*Xn_L*Xn_L+3*d_L[18]*Yn_L*Yn_L;
	
	dP1_L_dZn=a_L[1]+a_L[4]*Yn_L+a_L[5]*Xn_L+2*a_L[7]*Zn_L+a_L[10]*Yn_L*Xn_L+2*a_L[11]*Zn_L*Yn_L+
		      2*a_L[12]*Zn_L*Xn_L+a_L[13]*Yn_L*Yn_L+a_L[15]*Xn_L*Xn_L+3*a_L[17]*Zn_L*Zn_L;
	dP2_L_dZn=b_L[1]+b_L[4]*Yn_L+b_L[5]*Xn_L+2*b_L[7]*Zn_L+b_L[10]*Yn_L*Xn_L+2*b_L[11]*Zn_L*Yn_L+
	 	      2*b_L[12]*Zn_L*Xn_L+b_L[13]*Yn_L*Yn_L+b_L[15]*Xn_L*Xn_L+3*b_L[17]*Zn_L*Zn_L;
    dP3_L_dZn=c_L[1]+c_L[4]*Yn_L+c_L[5]*Xn_L+2*c_L[7]*Zn_L+c_L[10]*Yn_L*Xn_L+2*c_L[11]*Zn_L*Yn_L+
		      2*c_L[12]*Zn_L*Xn_L+c_L[13]*Yn_L*Yn_L+c_L[15]*Xn_L*Xn_L+3*c_L[17]*Zn_L*Zn_L;
    dP4_L_dZn=d_L[1]+d_L[4]*Yn_L+d_L[5]*Xn_L+2*d_L[7]*Zn_L+d_L[10]*Yn_L*Xn_L+2*d_L[11]*Zn_L*Yn_L+
		      2*d_L[12]*Zn_L*Xn_L+d_L[13]*Yn_L*Yn_L+d_L[15]*Xn_L*Xn_L+3*d_L[17]*Zn_L*Zn_L;

	dP1_R_dXn=a_R[3]+a_R[5]*Zn_R+a_R[6]*Yn_R+2*a_R[9]*Xn_R+a_R[10]*Zn_R*Yn_R+a_R[12]*Zn_R*Zn_R+
		      a_R[14]*Yn_R*Yn_R+2*a_R[15]*Zn_R*Xn_R+2*a_R[16]*Yn_R*Xn_R+3*a_R[19]*Xn_R*Xn_R;
	dP2_R_dXn=b_R[3]+b_R[5]*Zn_R+b_R[6]*Yn_R+2*b_R[9]*Xn_R+b_R[10]*Zn_R*Yn_R+b_R[12]*Zn_R*Zn_R+
		      b_R[14]*Yn_R*Yn_R+2*b_R[15]*Zn_R*Xn_R+2*b_R[16]*Yn_R*Xn_R+3*b_R[19]*Xn_R*Xn_R;
    dP3_R_dXn=c_R[3]+c_R[5]*Zn_R+c_R[6]*Yn_R+2*c_R[9]*Xn_R+c_R[10]*Zn_R*Yn_R+c_R[12]*Zn_R*Zn_R+
		      c_R[14]*Yn_R*Yn_R+2*c_R[15]*Zn_R*Xn_R+2*c_R[16]*Yn_R*Xn_R+3*c_R[19]*Xn_R*Xn_R;
	dP4_R_dXn=d_R[3]+d_R[5]*Zn_R+d_R[6]*Yn_R+2*d_R[9]*Xn_R+d_R[10]*Zn_R*Yn_R+d_R[12]*Zn_R*Zn_R+
		      d_R[14]*Yn_R*Yn_R+2*d_R[15]*Zn_R*Xn_R+2*d_R[16]*Yn_R*Xn_R+3*d_R[19]*Xn_R*Xn_R;
	
	dP1_R_dYn=a_R[2]+a_R[4]*Zn_R+a_R[6]*Xn_R+2*a_R[8]*Yn_R+a_R[10]*Zn_R*Xn_R+a_R[11]*Zn_R*Zn_R+
		      2*a_R[13]*Yn_R*Zn_R+2*a_R[14]*Yn_R*Xn_R+a_R[16]*Xn_R*Xn_R+3*a_R[18]*Yn_R*Yn_R;
	dP2_R_dYn=b_R[2]+b_R[4]*Zn_R+b_R[6]*Xn_R+2*b_R[8]*Yn_R+b_R[10]*Zn_R*Xn_R+b_R[11]*Zn_R*Zn_R+
		      2*b_R[13]*Yn_R*Zn_R+2*b_R[14]*Yn_R*Xn_R+b_R[16]*Xn_R*Xn_R+3*b_R[18]*Yn_R*Yn_R;
	dP3_R_dYn=c_R[2]+c_R[4]*Zn_R+c_R[6]*Xn_R+2*c_R[8]*Yn_R+c_R[10]*Zn_R*Xn_R+c_R[11]*Zn_R*Zn_R+
		      2*c_R[13]*Yn_R*Zn_R+2*c_R[14]*Yn_R*Xn_R+c_R[16]*Xn_R*Xn_R+3*c_R[18]*Yn_R*Yn_R;
	dP4_R_dYn=d_R[2]+d_R[4]*Zn_R+d_R[6]*Xn_R+2*d_R[8]*Yn_R+d_R[10]*Zn_R*Xn_R+d_R[11]*Zn_R*Zn_R+
		      2*d_R[13]*Yn_R*Zn_R+2*d_R[14]*Yn_R*Xn_R+d_R[16]*Xn_R*Xn_R+3*d_R[18]*Yn_R*Yn_R;
	
	dP1_R_dZn=a_R[1]+a_R[4]*Yn_R+a_R[5]*Xn_R+2*a_R[7]*Zn_R+a_R[10]*Yn_R*Xn_R+2*a_R[11]*Zn_R*Yn_R+
		      2*a_R[12]*Zn_R*Xn_R+a_R[13]*Yn_R*Yn_R+a_R[15]*Xn_R*Xn_R+3*a_R[17]*Zn_R*Zn_R;
	dP2_R_dZn=b_R[1]+b_R[4]*Yn_R+b_R[5]*Xn_R+2*b_R[7]*Zn_R+b_R[10]*Yn_R*Xn_R+2*b_R[11]*Zn_R*Yn_R+
		      2*b_R[12]*Zn_R*Xn_R+b_R[13]*Yn_R*Yn_R+b_R[15]*Xn_R*Xn_R+3*b_R[17]*Zn_R*Zn_R;
    dP3_R_dZn=c_R[1]+c_R[4]*Yn_R+c_R[5]*Xn_R+2*c_R[7]*Zn_R+c_R[10]*Yn_R*Xn_R+2*c_R[11]*Zn_R*Yn_R+
		      2*c_R[12]*Zn_R*Xn_R+c_R[13]*Yn_R*Yn_R+c_R[15]*Xn_R*Xn_R+3*c_R[17]*Zn_R*Zn_R;
    dP4_R_dZn=d_R[1]+d_R[4]*Yn_R+d_R[5]*Xn_R+2*d_R[7]*Zn_R+d_R[10]*Yn_R*Xn_R+2*d_R[11]*Zn_R*Yn_R+
		      2*d_R[12]*Zn_R*Xn_R+d_R[13]*Yn_R*Yn_R+d_R[15]*Xn_R*Xn_R+3*d_R[17]*Zn_R*Zn_R;

//////////////////////////////////矩阵A求解////////////////////////////////////////////////////////
	
	//分别由左、右同名像点行列坐标对X、Y、Z进行求导

	dr_L_dX=(rs_L/Xs_L)*(dP1_L_dXn*P2_L-dP2_L_dXn*P1_L)/(P2_L*P2_L);
    dr_L_dY=(rs_L/Ys_L)*(dP1_L_dYn*P2_L-dP2_L_dYn*P1_L)/(P2_L*P2_L);
	dr_L_dZ=(rs_L/Zs_L)*(dP1_L_dZn*P2_L-dP2_L_dZn*P1_L)/(P2_L*P2_L);
    
	dr_R_dX=(rs_R/Xs_R)*(dP1_R_dXn*P2_R-dP2_R_dXn*P1_R)/(P2_R*P2_R);
    dr_R_dY=(rs_R/Ys_R)*(dP1_R_dYn*P2_R-dP2_R_dYn*P1_R)/(P2_R*P2_R);
	dr_R_dZ=(rs_R/Zs_R)*(dP1_R_dZn*P2_R-dP2_R_dZn*P1_R)/(P2_R*P2_R);
	
	dc_L_dX=(cs_L/Xs_L)*(dP3_L_dXn*P4_L-dP4_L_dXn*P3_L)/(P4_L*P4_L);
    dc_L_dY=(cs_L/Ys_L)*(dP3_L_dYn*P4_L-dP4_L_dYn*P3_L)/(P4_L*P4_L);
	dc_L_dZ=(cs_L/Zs_L)*(dP3_L_dZn*P4_L-dP4_L_dZn*P3_L)/(P4_L*P4_L);
	
	dc_R_dX=(cs_R/Xs_R)*(dP3_R_dXn*P4_R-dP4_R_dXn*P3_R)/(P4_R*P4_R);
    dc_R_dY=(cs_R/Ys_R)*(dP3_R_dYn*P4_R-dP4_R_dYn*P3_R)/(P4_R*P4_R);
	dc_R_dZ=(cs_R/Zs_R)*(dP3_R_dZn*P4_R-dP4_R_dZn*P3_R)/(P4_R*P4_R);

    //对矩阵L各个元素进行赋值	

	A.SetElement(0,0,dr_L_dX);
	A.SetElement(0,1,dr_L_dY);
	A.SetElement(0,2,dr_L_dZ);
	A.SetElement(1,0,dr_R_dX);
	A.SetElement(1,1,dr_R_dY);
	A.SetElement(1,2,dr_R_dZ);
	A.SetElement(2,0,dc_L_dX);
	A.SetElement(2,1,dc_L_dY);
	A.SetElement(2,2,dc_L_dZ);
	A.SetElement(3,0,dc_R_dX);
	A.SetElement(3,1,dc_R_dY);
	A.SetElement(3,2,dc_R_dZ);

//////////////////////////////////矩阵L求解////////////////////////////////////////////////////////

	//计算左、右影像同名点行、列初始坐标似然值

	row_L_si=rs_L*(P1_L/P2_L)+r0_L;
	row_R_si=rs_R*(P1_R/P2_R)+r0_R;
	col_L_si=cs_L*(P3_L/P4_L)+c0_L;
	col_R_si=cs_R*(P3_R/P4_R)+c0_R;
	
    //对矩阵L各个元素进行赋值

	L.SetElement(0,0,row_L-row_L_si);
	L.SetElement(1,0,row_R-row_R_si);
	L.SetElement(2,0,col_L-col_L_si);
	L.SetElement(3,0,col_R-col_R_si);

	//定义CMatrix的类对象,以便进行矩阵运算

	CMatrix A1(3,4),A2(3,3),A3(3,3);

    //转置运算

	A1=A.Transpose();	
	A2=A1*A;

    //求逆运算

	A2.InvertGaussJordan();

    //计算矩阵dX,其中矩阵dX的三个元素分别为地面坐标的改正值derta_X、derta_Y、derta_Z

	dX=A2*A1*L;
	derta_X=dX.GetElement(0,0);
	derta_Y=dX.GetElement(1,0);
	derta_Z=dX.GetElement(2,0);
	return true;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -