高斯正反算程序代码Word文件下载.docx
- 文档编号:18817070
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:14
- 大小:17.51KB
高斯正反算程序代码Word文件下载.docx
《高斯正反算程序代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《高斯正反算程序代码Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
longdouble*pointer_B,*pointer_L;
longdoubleDH;
pointer_B=&
FSB;
pointer_L=&
FSL;
pointer_x=&
x;
pointer_y=&
y;
printf("
\n============================欢迎使用高斯投影计算程序============================\n"
);
说明\n"
1.程序可实现在任意椭球上进行高斯三度带和六度带正算和反算;
\n"
2.经纬度的输入输出格式为:
度分秒,例如:
113°
05\'
13.68466\"
输入时为:
113.051368466;
3.y坐标的输入输出格式为:
带号*10E6+500公里+自然坐标,例如:
y=18637682.388,18为带号,自然坐标为137682.388;
4.其余可按照提示完成,如有疑问可发送Email至gys_long@,我们将尽快为您解答。
"
\n================================================================================\n"
请选择计算方式:
A.三度带正算;
\tB.三度带反算;
\tC.六度带正算;
\tD.六度带反算\n"
请选择字母后回车:
scanf("
%c"
&
XZ);
if(XZ=='
A'
||XZ=='
a'
)
{XZZF='
Z'
XZSL='
S'
printf("
注意:
您将要进行的是三度带正算!
}
elseif(XZ=='
B'
b'
F'
您将要进行的是三度带反算!
C'
c'
L'
您将要进行的是六度带正算!
D'
d'
您将要进行的是六度带反算!
else
{
printf("
警告:
您操作有误!
!
是否继续Y/N:
scanf("
%s"
YN);
}
do
if(YN=='
N'
||YN=='
n'
{
printf("
欢迎您继续使用此程序,如有疑问可发送Email至gys_long@,我们将尽快为您解答!
break;
}
if(XZZF=='
||XZZF=='
z'
请选择椭球:
\n1.克拉索夫斯基椭球;
2.1975年国际椭球体;
3.WGS-84椭球体;
4.自定义椭球\n"
请选择数字后回车:
scanf("
%d"
num);
switch(num)
case1:
{
a=6378245.0000000000;
b=6356863.0187730473;
您选择的是克拉索夫斯基椭球!
\n请输入经度L和纬度B:
(输入时经度和纬度之间用逗号隔开)\n"
%lf,%lf"
L,&
B);
L0=(XZSL=='
||XZSL=='
l'
)?
((N=(int)((L+3)/6.+0.5))*6-3):
((N=(int)(L/3.+0.5))*3);
\t=======================中间计算过程结果=======================\n\n"
\t\tN=%d\n\t\tL0=%f\n"
N,L0);
B1=AngleToRadian(B);
//printf("
HD=%lf"
B1);
L0=AngleToRadian(L0);
L1=AngleToRadian(L);
l=L1-L0;
GSZS(a,b,l,B1,pointer_x,pointer_y);
\n\t===========================计算结果===========================\n"
\n\t\tx=%-20.4lf\t\ty=%-20.4lf\n"
x,(y+500000+N*1000000));
\n\t==============================================================\n"
break;
}
case2:
a=6378140.0000000000;
b=6356755.2881575287;
您选择的是1975年国际椭球体!
\n\t==========================计算结果为==========================\n"
\n\t\tx=%-20.3lf\t\ty=%-20.3lf\n"
case3:
a=6378137.0000000000;
b=6356752.3142;
您选择的是WGS-84椭球体!
case4:
您选择的是自定义椭球体!
\n请输入长半轴a、短半轴b、经度L和纬度B:
(输入时数据之间用逗号隔开)\n"
%lf,%lf,%lf,%lf"
a,&
b,&
\t========================中间计算过程结果========================\n\n"
default:
您选择了错误的数字\n"
if(YN=='
欢迎您下次使用此程序,如有疑问可发送Email至gys_long@,我们将尽快为您解答!
elseif(XZZF=='
f'
//printf("
请输入中央子午线L0:
//scanf("
N);
\n请输入x坐标和y坐标:
(输入时x坐标和y坐标之间用逗号隔开)\n"
x,&
y);
FSB=Bf(a,b,x);
\t\tBf=%-20.10lf\n"
FSB);
//
DH=floor(y/1000000);
y=y-DH*1000000-500000;
//
GSFS(a,b,FSB,y,pointer_B,pointer_L);
FSB=RadianToAngle(FSB);
FSL=RadianToAngle(FSL);
(DH*6-3):
(DH*3);
\t\tDH=%-20.0lf\n\t\tL0=%-20.0lf\n\t\tl=%-20.10lf\n"
DH,L0,FSL);
\n\t\tB=%-20.10lf\t\tL=%-20.10lf\n"
FSB,L0+FSL);
\n请输入长半轴a、短半轴b、x坐标和y坐标:
您选择错误!
while(YN=='
Y'
y'
longdoubleAngleToRadian(longdoublealfa)
longdoublealfa1,alfa2;
longdoubleHS;
alfa=alfa+0.00000000000001;
alfa1=floor(alfa)+floor((alfa-floor(alfa))*100.)/60;
alfa2=(alfa*100.-floor(alfa*100.0))/36;
alfa1+=alfa2;
HS=alfa1/180.*PI;
return(HS);
longdoubleRadianToAngle(longdoublealfa)
alfa=alfa*180./PI;
alfa1=floor(alfa)+floor((alfa-floor(alfa))*60.)/100.;
alfa2=(alfa*60.-floor(alfa*60.))*0.006;
return(alfa1);
voidGSZS(longdoublea,longdoubleb,longdoublel,longdoubleB,longdouble*x,longdouble*y)
longdoublee,e1,t,u2;
longdoublem0,m2,m4,m6,m8,a0,a2,a4,a6,a8,X;
longdoublen0,n2,n4,n6,n8,sin2B,sin4B,sin6B,sin8B,N;
e=(sqrt(a*a-b*b))/a;
e1=(sqrt(a*a-b*b))/b;
t=tan(B);
u2=e1*e1*cos(B)*cos(B);
m0=a*(1-e*e);
m2=3.0/2.0*e*e*m0;
m4=5.0/4.0*e*e*m2;
m6=7.0/6.0*e*e*m4;
m8=9.0/8.0*e*e*m6;
a0=m0+m2/2.0+3.0/8.0*m4+5.0/16.0*m6+35.0/128.0*m8;
a2=m2/2.0+m4/2.0+15.0/32.0*m6+7.0/16.0*m8;
a4=m4/8.0+3.0/1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 正反 程序代码