找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 284|回复: 0

[代码] 计算椭球上大地线长度

[复制链接]

已领礼包: 6个

财富等级: 恭喜发财

发表于 2016-10-18 20:47:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1.   #include "stdio.h"
  2.   #include "9simp.c"
  3.   #include "math.h"
  4.   #define rou 206264.8062
  5.   double  a=6378245;
  6.   double  b=6356863.0;
  7.   #define  GS  21
  8.   main()
  9.   { static double /*要输入弧度*/
  10.   
  11.   B[GS]={ },
  12.   L[GS]={ };
  13.   
  14.   double B0=0.629026214,a0,b0,eps,sum=0.0,t[GS-1],simpf(double);
  15.   double L_L[GS-1],B_B[GS-1],Bm[GS-1];
  16.   double c,E,e,e1,ec[GS-1],es[GS-1],Vm[GS-1],Nm[GS-1],tm[GS-1];
  17.   double u0,v0,u1,v1,aa,bb,suml=0.0;
  18.   int i,j=0;
  19. /*求大地多边形面积*/
  20.   a0=B0;  eps=0.000001;
  21.   for(i=1;i<GS;i++)         
  22.   {b0=(B+B[i-1])/2;
  23.     t[i-1]=b*b*(L-L[i-1])*simp(a0,b0,eps,simpf);
  24.    
  25.   }
  26.   printf("\n与x轴面积为  ");
  27.   for(i=0;i<GS-1;i++)
  28.    sum=sum+t;
  29.   printf("%.4f  ",sum);

  30.   /* 计算两点间大地线长度的程序*/
  31.   for(i=1;i<GS;i++)
  32.   {L_L[i-1]=(L-L[i-1])*rou;
  33.     B_B[i-1]=(B-B[i-1])*rou;
  34.     Bm[i-1]=(B+B[i-1])/2;
  35.   }

  36.   c=a*a/b;E=sqrt(a*a-b*b);e=E/a;e1=E/b;
  37.   for(i=0;i<GS-1;i++)
  38.   {
  39.   ec=e1*cos(Bm);   
  40.   es=e*sin(Bm);
  41.   Vm=sqrt(1+ec*ec);
  42.   Nm=a/sqrt(1-es*es);
  43.   tm=tan(Bm);
  44.   u1=(L_L/rou)*Nm*cos(Bm);
  45.   v1=(B_B/rou)*Nm/(Vm*Vm);
  46.   do
  47.   {j=j+1;
  48.   u0=u1;v0=v1;
  49.   bb=(u0*u0*(2+3*tm*tm+2*ec*ec)+3*v0*v0*ec*ec*(-1+tm*tm-ec*ec-4*tm*tm*ec*ec))/(24*Nm*Nm);
  50.   aa=(u0*u0*tm*tm-v0*v0*(1+ec*ec-9*tm*tm*ec*ec))/(24*Nm*Nm);
  51.   u1=L_L*Nm*cos(Bm)/(rou*(1+bb));
  52.   v1=B_B*Nm/(rou*Vm*Vm*(1+aa));
  53.   }while((fabs(u1-u0)>=1e-10)&&(fabs(v1-v0)>=1e-10));
  54.   suml=suml+sqrt(u1*u1+v1*v1);
  55.   }
  56.   /*printf("运行次数j=%d \n",j);*/
  57.   printf("大地线长度 %.4f \n\n",suml);

  58.   }

  59.   
  60.   double simpf(x)
  61.   double x;
  62.   { double y,e;
  63.    e=sqrt(a*a-b*b)/a;
  64.     y=cos(x)/(1+e*e*sin(x)*sin(x))*(1+e*e*sin(x)*sin(x));
  65.     return(y);
  66.   }

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-27 07:23 , Processed in 0.208365 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表