C语言空间后方交会源代码Word格式.docx

上传人:b****2 文档编号:13394071 上传时间:2022-10-10 格式:DOCX 页数:14 大小:17.92KB
下载 相关 举报
C语言空间后方交会源代码Word格式.docx_第1页
第1页 / 共14页
C语言空间后方交会源代码Word格式.docx_第2页
第2页 / 共14页
C语言空间后方交会源代码Word格式.docx_第3页
第3页 / 共14页
C语言空间后方交会源代码Word格式.docx_第4页
第4页 / 共14页
C语言空间后方交会源代码Word格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C语言空间后方交会源代码Word格式.docx

《C语言空间后方交会源代码Word格式.docx》由会员分享,可在线阅读,更多相关《C语言空间后方交会源代码Word格式.docx(14页珍藏版)》请在冰豆网上搜索。

C语言空间后方交会源代码Word格式.docx

i<

6;

i++)//构造高斯矩阵

//for(j=0;

j<

j++)

//q[i][j]=c[i][j];

//for(i=0;

i++)

//for(j=6;

12;

//{

//if(i+6==j)

//q[i][j]=1;

//else

//q[i][j]=0;

//}

//for(h=k=0;

k<

n-1;

k++,h++)//消去对角线以下的数据

//for(i=k+1;

//{

//if(q[i][h]==0)

//continue;

//p=q[k][h]/q[i][h];

////p=q[i][h]/q[k][h];

//for(j=0;

//{

//q[i][j]*=p;

//q[i][j]-=q[k][j];

//}

//}

//for(h=k=5;

k>

0;

k--,h--)//消去对角线以上的数据

//for(i=k-1;

i>

=0;

i--)

//{

//if(q[i][h]==0)

//continue;

//p=q[k][h]/q[i][h];

////p=q[i][h]/q[k][h];

//for(j=11;

j>

j--)

//{

//q[i][j]*=p;

//q[i][j]-=q[k][j];

//}

//for(i=0;

i++)//将对角线上数据化为1

//p=1.0/q[i][i];

//for(j=0;

i++)//提取逆矩阵

n;

//c[i][j]=q[i][j+6];

//}

voidContraryMatrix(double*constpMatrix,double*const_pMatrix,constint&

dim)

intii,jj,kk;

intflag=0;

double*tMatrix=newdouble[2*dim*dim];

for(inti=0;

i<

dim;

i++){

for(intj=0;

j<

j++)

tMatrix[i*dim*2+j]=pMatrix[i*dim+j];

}

for(i=0;

for(intj=dim;

dim*2;

tMatrix[i*dim*2+j]=0.0;

tMatrix[i*dim*2+dim+i]=1.0;

//Initializationover!

i++)//ProcessCols

{

doublebase=tMatrix[i*dim*2+i];

if(fabs(base)<

1E-300)

{

for(ii=i;

ii<

ii++)

{

if(tMatrix[ii*dim*2+i]!

=0)

{

flag=1;

for(jj=0;

jj<

2*dim;

jj++)

{

tMatrix[i*dim*2+jj]+=tMatrix[ii*dim*2+jj];

}

}

}

base=tMatrix[i*dim*2+i];

if(flag==0)

printf("

求逆矩阵过程中被零除,无法求解!

"

);

//exit(0);

}

j++)//row

if(j==i)continue;

doubletimes=tMatrix[j*dim*2+i]/base;

for(intk=0;

k<

k++)//col

{

tMatrix[j*dim*2+k]=tMatrix[j*dim*2+k]-times*tMatrix[i*dim*2+k];

}

for(intk=0;

k++){

tMatrix[i*dim*2+k]/=base;

i++)

_pMatrix[i*dim+j]=tMatrix[i*dim*2+j+dim];

}

delete[]tMatrix;

}

voidmain()

{

doublef,xo,yo;

//方位元素

intm;

//摄影比例尺分母

f=0.15324;

xo=0;

yo=0;

m=50000;

structcoordinatecoor[n]={{-0.08615,-0.06899,36589.41,25273.32,2195.17},{-0.05340,0.08221,37631.08,31324.51,728.69},{-0.01478,-0.07663,39100.97,24934.98,2386.50},

{0.01046,0.06443,40426.54,30319.81,757.31}};

inti,j;

//循环变量

doubleXs,Ys,Zs;

//外方位线元素

doublephi,omega,kappa;

//外方位角元素

doubleR[3][3];

//旋转矩阵R

double(x)[n],(y)[n];

//控制点像点坐标的近似值

doubleA[8][6];

//误差方程中的矩阵A

doubleATA[6][6];

//矩阵A的转置矩阵与A的乘积

doubleL[8][1];

doubleATL[6][1];

//矩阵A的转置矩阵与L的乘积

double_ATA[6][6];

doubleX[6][1];

//未知数矩阵

doubleV[8][1];

//改正数矩阵

doubleDXs,DYs,DZs,Dphi,Domega,Dkappa;

//6个外方位元素的改正值

//与精度计算有关的量

doublem0;

//单位权中误差

doubleQ[6][6];

//协方差矩阵

doublem1,m2,m3,m4,m5,m6;

//未知数Xs,Ys,Zs,phi,omega,kappa的中误差矩阵

Xs=0;

Ys=0;

for(i=0;

Xs+=coor[i].Xt;

Ys+=coor[i].Yt;

//外方位元素的初始值

Xs/=n;

Ys/=n;

Zs=f*m;

phi=0;

omega=0;

kappa=0;

//在竖直摄影情况下

do

//计算旋转矩阵R的各个元素

R[0][0]=cos(phi)*cos(kappa)-sin(phi)*sin(omega)*sin(kappa);

R[0][1]=-cos(phi)*sin(kappa)-sin(phi)*sin(omega)*cos(kappa);

R[0][2]=-sin(phi)*cos(omega);

R[1][0]=cos(omega)*sin(kappa);

R[1][1]=cos(omega)*cos(kappa);

R[1][2]=-sin(omega);

R[2][0]=sin(phi)*cos(kappa)+cos(phi)*sin(omega)*sin(kappa);

R[2][1]=-sin(phi)*sin(kappa)+cos(phi)*sin(omega)*cos(kappa);

R[2][2]=cos(phi)*cos(omega);

//将未知数的近似值代人共线方程式,计算(x),(y)

for(i=0;

(x)[i]=-f*(R[0][0]*(coor[i].Xt-Xs)+R[1][0]*(coor[i].Yt-Ys)+R[2][0]*(coor[i].Zt-Zs))/(R[0][2]*(coor[i].Xt-Xs)+R[1][2]*(coor[i].Yt-Ys)+R[2][2]*(coor[i].Zt-Zs));

(y)[i]=-f*(R[0][1]*(coor[i].Xt-Xs)+R[1][1]*(coor[i].Yt-Ys)+R[2][1]*(coor[i].Zt-Zs))/(R[0][2]*(coor[i].Xt-Xs)+R[1][2]*(coor[i].Yt-Ys)+R[2][2]*(coor[i].Zt-Zs));

//计算矩阵A的各个元素

A[2*i][0]=(R[0][0]*f+R[0][2]*(coor[i].x-xo))/(R[0][2]*(coor[i].Xt-Xs)+R[1][2]*(coor[i].Yt-Ys)+R[2][2]*(coor[i].Zt-Zs));

A[2*i][1]=(R[1][0]*f+R[1][2]*(coor[i].x-xo))/(R[0][2]*(coor[i].Xt-Xs)+R[1][2]*(coor[i].Yt-Ys)+R[2][2]*(coor[i].Zt-Zs));

A[2*i][2]=(R[2][0]*f+R[2][2]*(coor[i].x-xo))/(R[0][2]*(coor[i].Xt-Xs)+R[1][2]*(coor[i].Yt-Ys)+R[2][2]*(coor[i].Zt-Zs));

A[2*i][3]=(coor[i].y-yo)*sin(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 思想汇报心得体会

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1