大地测量实验报告.docx

上传人:b****7 文档编号:10272836 上传时间:2023-02-09 格式:DOCX 页数:11 大小:44.26KB
下载 相关 举报
大地测量实验报告.docx_第1页
第1页 / 共11页
大地测量实验报告.docx_第2页
第2页 / 共11页
大地测量实验报告.docx_第3页
第3页 / 共11页
大地测量实验报告.docx_第4页
第4页 / 共11页
大地测量实验报告.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

大地测量实验报告.docx

《大地测量实验报告.docx》由会员分享,可在线阅读,更多相关《大地测量实验报告.docx(11页珍藏版)》请在冰豆网上搜索。

大地测量实验报告.docx

大地测量实验报告

大地测量实验报告

 

姓名:

孙志勇

学号:

20104220

专业班级:

测绘工程10级

(2)

 

实验名称:

白塞尔大地主题解算(正算和反算)

实验目的:

1.通过编写白塞尔大地主题电算程序进一步掌握白塞尔法解算大地主题的基本思想。

2.熟练掌握将椭球面上的大地元素按照白塞尔投影条件投影到辅助球面上,继而在球面上进行大地主题解算,最后再将球面上的计算结果换算到椭球面上的基本方法和步骤。

3.学会掌握计算机编程的基本能力。

实验环境:

MicrosoftVisualC++

注意事项:

1.在编写程序的过程当中要注意代码的前后统一和重复。

2.注意数值类型的转换和度分秒的换算。

实验步骤:

正算:

1.计算起点的规划纬度

2.计算辅助函数值

3.计算系数A,B,C及d,e.

4计算球面长度

5.计算经度差改正数

6.计算终点大地坐标及大地方位角。

反算:

1.进行计算辅助函数值

2.用逐次趋近法同时计算起点大地方位角、球面长度及经差。

3.计算系数A,B,C及大地线长度S.

4.计算反方位角及确定符号。

程序源代码:

正算:

#include

#include

#defineee0.006694384999588

#defineI3.141592653

doubleF(double,double,double);

voidmain(void)

{

doubleA1,B1,L1,S,A2,B2,L2;

doublex1,x2,x3,y1,y2,y3,z1,z2,z3;

doubleW1,sinu1,sinu2,cosu1,sinA0;

doublecota1,cos2a1,sin2a1,cosA0A0;

doubleA,B,C,d,e,a0,a1,m;

doublen,a,Q,R;

printf("请输入数据B1=");

scanf("%lf%lf%lf",&x1,&x2,&x3);

B1=F(x1,x2,x3);

printf("请输入数据L1=");

scanf("%lf%lf%lf",&y1,&y2,&y3);

L1=F(y1,y2,y3);

printf("请输入A1=");

scanf("%lf%lf%lf",&z1,&z2,&z3);

A1=F(z1,z2,z3);

printf("请输入S=");

scanf("%lf",&S);

printf("B1=%f\n",B1);

printf("L1=%f\n",L1);

printf("A1=%f\n",A1);

printf("S=%f\n",S);

/*计算起点的规划纬度*/

W1=sqrt(1-ee*sin(B1)*sin(B1));

sinu1=sin(B1)*sqrt(1-ee)/W1;

cosu1=cos(B1)/W1;

printf("W1=%f\n",W1);

printf("sinu1=%f\n",sinu1);

printf("cosu1=%f\n",cosu1);

/*计算辅助函数值*/

sinA0=cosu1*sin(A1);

cota1=cosu1*cos(A1)/sinu1;

sin2a1=2*cota1/(cota1*cota1+1);

cos2a1=(cota1*cota1-1)/(cota1*cota1+1);

printf("sinA0=%f\n",sinA0);

printf("cota1=%f\n",cota1);

printf("sin2a1=%f\n",sin2a1);

printf("cos2a1=%f\n",cos2a1);

/*计算系数ABC及de*/

cosA0A0=1-sinA0*sinA0;

A=6356755.288+(10710.341-(13.534*cosA0A0))*cosA0A0;

B=(5355.171-9.023*cosA0A0)*cosA0A0;

C=(2.256*(cosA0A0))*cosA0A0+0.006;

d=691.46768-(0.58143-0.00144*cosA0A0)*cosA0A0;

e=(0.2907-cosA0A0*0.0010)*cosA0A0;

printf("cosA0A0=%f\n",cosA0A0);

printf("A=%f\n",A);

printf("B=%f\n",B);

printf("C=%f\n",C);

printf("d=%f\n",d);

printf("e=%f\n",e);

/*计算球面长度*/

a0=(S-(B+C*cos2a1)*sin2a1)/A;

m=sin2a1*cos(2*a0)+cos2a1*sin(2*a0);

n=(cos2a1)*(cos(2*a0))-(sin2a1)*(sin(2*a0));

a=a0+((B+5*C*n))*m/A;

printf("a0=%f\n",a0);

printf("m=%f\n",m);

printf("n=%f\n",n);

printf("a=%f\n",a);

/*计算经度差改正数*/

Q=(d*a+(e*(m-sin2a1))/3600/180*I)*sinA0;

printf("Q=%f\n",Q);

/*计算终点大地坐标及大地方位角*/

sinu2=sinu1*cos(a)+cosu1*cos(A1)*sin(a);

B2=180*atan(sinu2/((sqrt(1-ee))*(sqrt(1-sinu2*sinu2))))/I;

R=180*atan(sin(A1)*sin(a)/(cosu1*cos(a)-sinu1*sin(a)*cos(A1)))/I;

printf("sinu2=%f\n",sinu2);

printf("B2=%f\n",B2);

printf("R=%f\n",R*180/I);

/*确定R的值*/

if(sin(A1)>0&&tan(R)>0)

R=abs(R);

elseif(sin(A1)>0&&tan(R)<0)

R=I-abs(R);

elseif(sin(A1)<0&&tan(R)<0)

R=-abs(R);

else

R=abs(R)-I;

/*确定L2A2的值*/

L2=(L1*180/I+R-(Q/206265*180/I));

A2=atan(cosu1*sin(A1)/(cosu1*cos(a)*cos(A1)-sinu1*sin(a)));

if(sin(A1)<0&&tan(A2)>0)

A2=(fabs(A2))*180/I;

elseif(sin(A1)<0&&tan(A2)<0)

A2=(I-fabs(A2))*180/I;

elseif(sin(A1)>0&&tan(A2)>0)

A2=(I+fabs(A2))*180/I;

else

A2=(2*I-fabs(A2))*180/I;

printf("A2=%3f\nB2=%3f\nL2=%3f\n",A2,B2,L2);

}

doubleF(doublea2,doubleb2,doublec2)

{

doubled2;

d2=(double)(a2+1.0*b2/60+1.0*c2/3600);

d2=(d2/180)*I;

return(d2);

}

注:

A1,B1,L1,S分别为大地线起点的大地方位角、纬度、经度、大地线长;B2,L2,A2为大地线终点纬度、经度及方位角。

其他为中间过渡数据。

实验运行结果:

实验结果ei起点的大地方位角、。

度,球面长度及经查

反算:

#include

#include

#defineee0.00693421622966

#defineI3.141592654

doubleF(double,double,double);

voidmain(void)

{

doubleB1,B2,L1,L2,A1,A2,S,Y;

doubleW1,W2,L,Q,R,A,B,C;

doublex,y,z,p,q;

doublex1,x2,x3,y1,y2,y3,z1,z2,z3,w1,w2,w3;

doublea1,a2,b1,b2,m,n;

doublesinp,cosp,sinu1,sinu2,cosu1,cosu2,sinA0,cosA0;

Q=0;q=0;

printf("请输入起始数据B1=");

scanf("%lf%lf%lf",&x1,&x2,&x3);

B1=F(x1,x2,x3);

printf("请输入起始数据L1=");

scanf("%lf%lf%lf",&y1,&y2,&y3);

L1=F(y1,y2,y3);

printf("请输入起始数B2=");

scanf("%lf%lf%lf",&z1,&z2,&z3);

B2=F(z1,z2,z3);

printf("请输入起始数据L2=");

scanf("%lf%lf%lf",&w1,&w2,&w3);

L2=F(w1,w2,w3);

printf("B1=%f\n",B1);

printf("L1=%f\n",L1);

printf("B2=%f\n",B2);

printf("L2=%f\n",L2);

/*辅助计算*/

W1=sqrt(1-ee*sin(B1)*sin(B1));

W2=sqrt(1-ee*sin(B2)*sin(B2));

sinu1=sin(B1)*sqrt(1-ee)/W1;

sinu2=sin(B2)*(sqrt(1-ee))/W2;

cosu1=cos(B1)/W1;

cosu2=cos(B2)/W2;

L=L2-L1;

a1=sinu1*sinu2;

a2=cosu1*cosu2;

b1=cosu1*sinu2;

b2=sinu1*cosu2;

printf("W1=%f\n",W1);

printf("W2=%f\n",W2);

printf("sinu1=%f\n",sinu1);

printf("sinu2=%f\n",sinu2);

printf("cosu1=%f\n",cosu2);

printf("L=%f\n",L);

printf("a1=%f\n",a1);

printf("a2=%f\n",a2);

printf("b1=%f\n",b1);

printf("b2=%f\n",b2);

/*用逐次趋近法同时计算起点大地方位角、球面长度及经差R*/

do

{

R=L+Q;

x=cosu2*sin(R);

y=b1-b2*cos(R);

A1=atan(x/y);

if(x>0&&y>0)

A1=fabs(A1);

elseif(x>0&&y<0)

A1=I-fabs(A1);

elseif(x<0&&y<0)

A1=I+fabs(A1);

else

A1=2*I-fabs(A1);

sinp=x*sin(A1)+y*cos(A1);

cosp=a1+a2*cos(R);

p=atan(sinp/cosp);

if(cosp>0)

p=fabs(p);

sinA0=cosu1*sin(A1);

cosA0=sqrt(1-sinA0*sinA0);

p=I-fabs(p);

z=2*a1-cosA0*cosA0*cos(p);

m=(33523299-(28189-70*cosA0*cosA0))*(1e-10);

n=(28189-94*cosA0*cosA0)*(1e-10);

Q=q;

q=(m*p-m*z*sin(p))*sinA0;

}while(fabs(206265*(q-Q))>(1e-4));

printf("Q=%f\n",Q);

/*计算系数ABC及大地线长度*/

A=6356863.020+(10708.949-13.474*cosA0*cosA0)*cosA0*cosA0;

B=10708.938-17.956*cosA0*cosA0;

C=4.487;

Y=(cosA0*cosA0*cosA0*cosA0-2*z*z)*cos(p);

S=A*p+(B*z+C*Y)*sinp;

/*计算反方位角*/

A2=atan((cosu1*sin(R))/(b1*cos(R)-b2));

A2=A2*180/I;

A1=A1*180/I;

if(A1>0)

A2=abs(A2);

else

A2=-abs(A2);

printf("A1=%3f\nA2=%3f\nS=%3f\n",A1,A2,S);

}

doubleF(doublea,doubleb,doublec)

{

doubled;

if(a<0)

d=(double)(a-1.0*b/60-1.0*c/3600);

else

d=(double)(a+1.0*b/60+1.0*c/3600);

d=(d/180)*I;

returnd;

}

 

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

当前位置:首页 > 职业教育 > 中职中专

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

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