大地测量上机实习报告.doc
文本预览下载声明
题目: 大地测量学上机实习
学 号:
姓 名:
班 级:
专 业: 测绘工程
课程名称: 大地测量学基础
课程老师:
大地测量上机实习报告、实习步骤:1、先了解书本上关于大地主题解算的步骤;式中,,为椭球的长半轴,为椭球的卯酉圈曲率半径=6378.137km
,,为椭球的第一偏心率,为椭球的短半轴
=6356.7523141km。
2)程序代码
#include stdio.h
#include math.h
#define PI 3.1415926535897932384626433832795
double rad(double a,double b,double c)
{b=b+c/60;
a=a+b/60;
a=a/180*PI;
return a;}
void deg(double d,int *d1,int *d2,double *d3)
{d=d/PI;
*d1=(int)d;
*d2=(int)((d-*d1)*60);
*d3=((d-*d1)*60-*d2)*60;}
void X1(double a1,double e)
{double l,b,h,x,y,z,a,b1,c,n,w;
printf(please input L:\n);
scanf(%lf%lf%lf,a,b1,c);
l=rad(a,b1,c);
printf(please input B:\n);
scanf(%lf%lf%lf,a,b1,c);
b=rad(a,b1,c);
printf(please input H:\n);
scanf(%lf,h);
w=sqrt((1-e*e*sin(b)*sin(b)));
n=a1/w;
x=(n+h)*cos(b)*cos(l);
y=(n+h)*cos(b)*sin(l);
z=(n*(1-e*e)+h)*sin(b);
printf(X=%f\nY=%f\nZ=%f\n,x,y,z);}
void X2(double a1,double e)
{double l,b,h,x,y,z,n,w,m,g,m1,g1,l3,b3;int l1,l2,b1,b2;
printf(please input X:\n);
scanf(%lf,x);
printf(please input Y:\n);
scanf(%lf,y);
printf(please input Z:\n);
scanf(%lf,z);
l=atan2(y,x);
do{m=(z+a1*e*e*g/sqrt(1+g*g-e*e*g*g))/sqrt(x*x+y*y);
m1=atan(m);
g1=atan(g);
m1=m1/PI*180*3600;
g1=g1/PI*180*3600;
g=m;}
while(sqrt((m1-g1)*(m1-g1))0.0001);
b=atan(m);
w=sqrt(1-e*e*sin(b)*sin(b));
n=a1/w;
h=sqrt(x*x+y*y)/cos(b)-n;
deg(l,l1,l2,l3);
deg(b,b1,b2,b3);
printf(L=%d°%d%2.6f\nB=%d°%d%2.6f\nH=%5.6fm\n,l1,l2,l3,b1,b2,b3,h);}
void f(int a)
{double a1,e,e2;int b,c;
printf(please input L,B,H→X,Y,Z:请输入1 或 X,Y,Z→L,B,H:请输入2\n);
scanf(%d,b);
printf(请选择参考椭球面:\n克拉索夫斯基椭球(请输入1) \n或 IUGG 1975椭球(请输入2) \n或 CGCS 2000椭球(请输入3)\n或WGS-84椭球体(请输入4));
scanf(%d,c);
if (c==1){a1=6378245.0000,e2=0.00669342162297;}
else if (c==2){a1=6378140.0000,e2=0.00669438499959;}
else if (c==3){a1=6378137.0000,e2=0.00669438002290;}
else if (c==4){a1=6378137.0000,e2=0.00669437999013;};
e=sqrt(e2);
if (b==1)X1(
显示全部