空间前方交会程序

#include”stdio.h ”

#include”math.h ”

const int n=3;

void inverse (double c[n][n]);

templatevoid transpose (T1*mat1,T2*mat2,int a,int b);

templatevoid multi(T1*mat1,T2 * mat2,T2 * result,int a,int b,int c); templatevoid input (T*mat,int a,int b);

templatevoid output(T*mat,char*s,int a,int b);

void main()

{

double X=0,Y=0,Z=0;

double AT[3][4],ATA[3][3],XG[3][1],ATl[3][1];

double a1,a2,a3,b1,b2,b3,c1,c2,c3,l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,l11,l12,lx1,ly1,lx2,ly2;

double a10,a20,a30,b10,b20,b30,c10,c20,c30;

float r,w,k;

printf("输入r:\n");

scanf("%f",&r);

printf("输入w:\n");

scanf("%f",&w);

printf("输入k:\n");

scanf("%f",&k);

a1=cos(r)*cos(k)-sin(r)*sin(w)*sin(k);

a2=-cos(r)*sin(k)-sin(r)*sin(w)*cos(k); a3=-sin(r)*cos(w); b1=cos(w)*sin(k); b2=cos(w)*cos(k); b3=-sin(w); c1=sin(r)*cos(k)+cos(r)*sin(w)*sin(k); c2=-sin(r)*sin(k)+cos(r)*sin(w)*cos(k); c3=cos(r)*cos(w);

float r1,w1,k1;

printf("输入r1:\n");

scanf("%f",&r1);

printf("输入w1:\n");

scanf("%f",&w1);

printf("输入k1:\n");

scanf("%f",&k1);

a10=cos(r)*cos(k)-sin(r)*sin(w)*sin(k);

a20=-cos(r)*sin(k)-sin(r)*sin(w)*cos(k); a30=-sin(r)*cos(w); b10=cos(w)*sin(k); b20=cos(w)*cos(k); b30=-sin(w); c10=sin(r)*cos(k)+cos(r)*sin(w)*sin(k); c20=-sin(r)*sin(k)+cos(r)*sin(w)*cos(k); c30=cos(r)*cos(w);

double x0=0.0,y0=0.0,f=0.15324;

double x1=-86.15,y1=-68.99,x2=0.0,y2=0.0;

double Xs=393795.45,Ys=27476.46,Zs=7572.69;

l1=f*b1+(x1-x0)*a3;

l2=f*a1+(x1-x0)*b3;

l3=f*c1+(x1-x0)*c3;

lx1=f*a1*Xs+f*b1*Ys+f*c1*Zs+(x1-x0)*a3*Xs+(x1-x0)*b3*Ys+(x1-x0)*c3*Zs;

l4=f*a2+(y1-y0)*a3;

l5=f*b2+(y1-y0)*b3;

l6=f*c2+(y1-y0)*c3;

ly1=f*a2*Xs+f*b2*Ys+f*c2*Zs+(y1-y0)*a3*Xs+(y1-y0)*b3*Ys+(y1-y0)*c3*Zs;

l7=f*b10+(x2-x0)*a30;

l8=f*a10+(x2-x0)*b30;

l9=f*c10+(x2-x0)*c30;

lx2=f*a10*Xs+f*b10*Ys+f*c10*Zs+(x2-x0)*a30*Xs+(x2-x0)*b30*Ys+(x2-x0)*c30*Zs; l10=f*a20+(y2-y0)*a30;

l11=f*b20+(y2-y0)*b30;

l12=f*c20+(y2-y0)*c30;

ly2=f*a20*Xs+f*b20*Ys+f*c20*Zs+(y2-y0)*a30*Xs+(y2-y0)*b30*Ys+(y2-y0)*c30*Zs; double A[4][3]={l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,l11,l12};

double l[4][1]={lx1,ly1,lx2,ly2};

transpose(A,AT,3,4);

multi(AT,A,ATA,3,4,3); inverse(ATA); multi(AT,l,ATl,3,4,1); multi(ATA,ATl,XG,3,3,1); X=XG[0][0]; Y=XG[1][0]; Z=XG[2][0];

printf("X=%lf,Y=%lf,Z=%lf\n",X,Y,Z);

}

void inverse(double c[n][n])

{ int i,j,h,k;

double p;

double q[n][6];

for(i=0;i

for(j=0;j

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

for(i=0;i

for(j=n;j

{if(i+3==j)

q[i][j]=1;

else

q[i][j]=0;}

for(h=k=0;k

for(i=k+1;i

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

continue;

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

for(j=0;j

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

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

}

}

for(h=k=n-1;k>0;k--,h--) // 消去对角线以上的数据

for(i=k-1;i>=0;i--)

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

continue;

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

for(j=0;j

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

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

for(i=0;i

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

for(j=0;j

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

for(i=0;i

for(j=0;j

c[i][j]=q[i][j+3];

}

templatevoid transpose(T1*mat1,T2*mat2,int a,int b)

{ int i,j;

for(i=0;i

}

templatevoid multi(T1*mat1,T2 * mat2,T2 * result,int a,int b,int c) { int i,j,k;

} for(i=0;i

#include”stdio.h ”

#include”math.h ”

const int n=3;

void inverse (double c[n][n]);

templatevoid transpose (T1*mat1,T2*mat2,int a,int b);

templatevoid multi(T1*mat1,T2 * mat2,T2 * result,int a,int b,int c); templatevoid input (T*mat,int a,int b);

templatevoid output(T*mat,char*s,int a,int b);

void main()

{

double X=0,Y=0,Z=0;

double AT[3][4],ATA[3][3],XG[3][1],ATl[3][1];

double a1,a2,a3,b1,b2,b3,c1,c2,c3,l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,l11,l12,lx1,ly1,lx2,ly2;

double a10,a20,a30,b10,b20,b30,c10,c20,c30;

float r,w,k;

printf("输入r:\n");

scanf("%f",&r);

printf("输入w:\n");

scanf("%f",&w);

printf("输入k:\n");

scanf("%f",&k);

a1=cos(r)*cos(k)-sin(r)*sin(w)*sin(k);

a2=-cos(r)*sin(k)-sin(r)*sin(w)*cos(k); a3=-sin(r)*cos(w); b1=cos(w)*sin(k); b2=cos(w)*cos(k); b3=-sin(w); c1=sin(r)*cos(k)+cos(r)*sin(w)*sin(k); c2=-sin(r)*sin(k)+cos(r)*sin(w)*cos(k); c3=cos(r)*cos(w);

float r1,w1,k1;

printf("输入r1:\n");

scanf("%f",&r1);

printf("输入w1:\n");

scanf("%f",&w1);

printf("输入k1:\n");

scanf("%f",&k1);

a10=cos(r)*cos(k)-sin(r)*sin(w)*sin(k);

a20=-cos(r)*sin(k)-sin(r)*sin(w)*cos(k); a30=-sin(r)*cos(w); b10=cos(w)*sin(k); b20=cos(w)*cos(k); b30=-sin(w); c10=sin(r)*cos(k)+cos(r)*sin(w)*sin(k); c20=-sin(r)*sin(k)+cos(r)*sin(w)*cos(k); c30=cos(r)*cos(w);

double x0=0.0,y0=0.0,f=0.15324;

double x1=-86.15,y1=-68.99,x2=0.0,y2=0.0;

double Xs=393795.45,Ys=27476.46,Zs=7572.69;

l1=f*b1+(x1-x0)*a3;

l2=f*a1+(x1-x0)*b3;

l3=f*c1+(x1-x0)*c3;

lx1=f*a1*Xs+f*b1*Ys+f*c1*Zs+(x1-x0)*a3*Xs+(x1-x0)*b3*Ys+(x1-x0)*c3*Zs;

l4=f*a2+(y1-y0)*a3;

l5=f*b2+(y1-y0)*b3;

l6=f*c2+(y1-y0)*c3;

ly1=f*a2*Xs+f*b2*Ys+f*c2*Zs+(y1-y0)*a3*Xs+(y1-y0)*b3*Ys+(y1-y0)*c3*Zs;

l7=f*b10+(x2-x0)*a30;

l8=f*a10+(x2-x0)*b30;

l9=f*c10+(x2-x0)*c30;

lx2=f*a10*Xs+f*b10*Ys+f*c10*Zs+(x2-x0)*a30*Xs+(x2-x0)*b30*Ys+(x2-x0)*c30*Zs; l10=f*a20+(y2-y0)*a30;

l11=f*b20+(y2-y0)*b30;

l12=f*c20+(y2-y0)*c30;

ly2=f*a20*Xs+f*b20*Ys+f*c20*Zs+(y2-y0)*a30*Xs+(y2-y0)*b30*Ys+(y2-y0)*c30*Zs; double A[4][3]={l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,l11,l12};

double l[4][1]={lx1,ly1,lx2,ly2};

transpose(A,AT,3,4);

multi(AT,A,ATA,3,4,3); inverse(ATA); multi(AT,l,ATl,3,4,1); multi(ATA,ATl,XG,3,3,1); X=XG[0][0]; Y=XG[1][0]; Z=XG[2][0];

printf("X=%lf,Y=%lf,Z=%lf\n",X,Y,Z);

}

void inverse(double c[n][n])

{ int i,j,h,k;

double p;

double q[n][6];

for(i=0;i

for(j=0;j

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

for(i=0;i

for(j=n;j

{if(i+3==j)

q[i][j]=1;

else

q[i][j]=0;}

for(h=k=0;k

for(i=k+1;i

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

continue;

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

for(j=0;j

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

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

}

}

for(h=k=n-1;k>0;k--,h--) // 消去对角线以上的数据

for(i=k-1;i>=0;i--)

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

continue;

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

for(j=0;j

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

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

for(i=0;i

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

for(j=0;j

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

for(i=0;i

for(j=0;j

c[i][j]=q[i][j+3];

}

templatevoid transpose(T1*mat1,T2*mat2,int a,int b)

{ int i,j;

for(i=0;i

}

templatevoid multi(T1*mat1,T2 * mat2,T2 * result,int a,int b,int c) { int i,j,k;

} for(i=0;i


相关内容

  • 单像空间后方交会和双像解析空间后方-前方交会的算法程序实现
  • 单像空间后方交会和双像解析空间后方-前 方交会的算法程序实现 遥感科学与技术 摘要:如果已知每张像片的6个外方位元素,就能确定被摄物体与航摄像片的关系.因此,利用单像空间后方交会的方法,可以迅速的算出每张像片的6个外方位元素.而前方交会的计算,可以算出像片上点对应于地面点的三维坐标.基于这两点,利用 ...

  • 摄影测量实验报告(空间后方交会-前方交会)
  • 空间后方交会-空间前方交会程序编程实验 一. 实验目的要求 掌握运用空间后方交会-空间前方交会求解地面点的空间位置.学会运用空间后方交会的原理,根据所给控制点的地面摄影测量坐标系坐标以及相应的像平面坐标系中的坐标,利用计算机编程语言实现空间后方交会的过程,完成所给像对中两张像片各自的外方位元素的求解 ...

  • 摄影测量报告
  • 第一节 任务概述 ....................................................................... 3 1.1实习目的 . ......................................................... ...

  • 太原理工大学摄影测量学全部复习资料
  • 1.摄影测量学:对研究的物体进行摄影,量测和解译所获得的影像,获取被摄物体的几何信息和物理信息的一门科学和技术. 2.摄影测量的三个阶段:模拟摄影测量.解析摄影测量.数字摄影测量. 3.摄影测量解决的两大问题是几何定位和影像解译.几何定位是确定被摄物体的大小.形状和空间位置.几何定位的基本原理源于测 ...

  • 湖南城市学院摄影测量期末试卷(含答案)
  • 1.简述空间后方交会的解答过程.(6分) ⑴ 获取已知数据 ⑵ 量测控制点的像点坐标 ⑶ 确定未知数的初始值 ⑷计算旋转矩阵R ⑸ 逐点计算像点坐标的近似值 ⑹ 组成误差方程 ⑺ 组成法方程式 ⑻ 解求外方位元素 ⑼ 检查计算是否收敛 2. 你怎么理解摄影测量学中外方位元素?(6分) 答:在恢复像片 ...

  • 摄影测量简答题
  • <摄影测量与遥感>习题集参考答案 一.名词解释 摄影测量与遥感:是对非接触传感器系统获得的影像及数字表达进行记录.量测及解译,从而获得自然物体和环境的可靠信息的一门工艺.科学和技术. 像平面坐标系:像平面坐标系用以表示像点在像平面上的位臵,通常采用右手坐标系,x,y轴的选择按需要而定.在 ...

  • (测绘信息与工程,201202)测角三维坐标采集系统的设计与实现
  • 第37卷第1期2012年2月 ()文章编号:10073817201201003603--- 测绘信息与工程 JournalofGeomatics Vol.37No.1 Feb.2012文献标志码:A 测角三维坐标采集系统的设计与实现 刘尚国 于胜文 郑文华 王喜芹 ()山东科技大学测绘科学与工程学院 ...

  • 矿山测量学复习题
  • <矿山测量学>复习题 一.判断题 1.高斯投影后是以中央子午线作纵坐标轴,以赤道为横轴.( √ ) 2.经纬仪安置时,对中的目的是使仪器的竖轴位于铅垂位置.水平度盘水平.( × ) 3.经纬仪整平的目的是使仪器的中心与测站中心位于同一铅垂线上.( × ) 4.等高线是地图上高程相等的各相 ...

  • 摄影测量与遥感试题及答案
  • 一.名词解释 1.摄影比例尺 严格讲,摄影比例尺是指航摄像片上一线段为J 与地向上相应线段的水干距L 之比.由于影像片有倾角,地形有起伏,所以摄影比例尺在像片上处处不相等.一般指的摄影比例尺,是把摄影像片当作水平像片,地面取平均高程.这时像片上的一线段l 与地面上相应线段的水平距L 之比,称为摄影比 ...