📄 rpc1dlg.cpp
字号:
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 + -