毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

高斯投影的正算反算C++源代码

更新时间:2010-5-25:  来源:毕业论文

高斯投影的正算反算C++源代码
一、 设计目的:
   加深理解高斯—克吕格投影的实质,掌握高斯—克吕格投影直角坐标的运用,理解通用坐标和自然坐标值的关系。
二、 设计内容:
   1、编程实现由经纬度到直角坐标的转换;
   2、正确计算点所在的分度带;
   3、准确计算出点的通用坐标值。
三、 方法与步骤:
   1、理解公式中每个字母的含义;
   2、编程。
   3、编程的程序如下:
// 高斯投影正反算公式.cpp : Defines the entry point for the console application.
//#include "iostream.h"
#include "math.h"
int main(int argc, char* argv[])
{
 int n,a,d,c;
 int L[4],B[4],C[3],D[3],L0;
 double l,N,a0,a4,a6,a3,a5,x,y,BB,P,b,Z,Bf,b2,b3,b4,b5,Nf,LL,xx,yy;
 cout<<"1----正算(L,B-->x,y)    2----反算(x,y-->L,B)"<<endl;
 cout<<"请选择正算(1)或反算(2):"<<endl;
 cin>>n;
/////////////////正算
 if(n==1)
 {
  cout<<"请按顺序输入L,B:"<<endl;
  cout<<"输入L(度,分,秒):"<<endl;
  cin>>L[1]>>L[2]>>L[3];
  cout<<"请输入B(度,分,秒):"<<endl;
  cin>>B[1]>>B[2]>>B[3];

  BB=3.141592654*(B[1]+B[2]/60.0+B[3]/3600.0)/180;
  P=3.141592654*(B[1]*3600+B[2]*60+B[3])/(180*3600);
////////////////计算点所在投影带的中央子午线
  L[0]=6*(int((L[1]+L[2]/60.0+L[3]/3600.0)/6)+1)-3;
  cout<<"点所在投影带的中央子午线为:"<<endl;
  cout<<L[0]<<"度"<<endl;

  l=3.141592654*(L[1]+L[2]/60.0+L[3]/3600-L[0])/180;
  N=6399698.902-(21562.267-(108.973-0.612*cos(BB)*cos(BB))*cos(BB)*cos(BB))*cos(BB)*cos(BB);
  a0=32140.404-(135.3302-(0.7092-0.0040*cos(BB)*cos(BB))*cos(BB)*cos(BB))*cos(BB)*cos(BB);
  a4=(0.25+0.00252*cos(BB)*cos(BB))*cos(BB)*cos(BB)-0.04166; 
  a6=(0.166*cos(BB)*cos(BB)-0.084)*cos(BB)*cos(BB);
  a3=(0.3333333+0.001123*cos(BB)*cos(BB))*cos(BB)*cos(BB)-0.1666667;
  a5=0.0083-(0.1667-(0.1968+0.0040*cos(BB)*cos(BB))*cos(BB)*cos(BB))*cos(BB)*cos(BB);
  ///////////代号计算
  a=L[0]/6+1;
  d=L[0]-1.5;
  c=d/3+1;///////////////计算坐标
  x=6367558.4969*P-(a0-(0.5+(a4+a6*l*l)*l*l)*l*l*N)*sin(BB)*cos(BB);
  y=(1+(a3+a5*l*l)*l*l)*l*N*cos(BB);
/////////////格式控制 
  cout.setf(ios::fixed);
        cout.setf(ios::showpoint);
        cout.precision(3);
        cout<<"正算结果为:"<<endl; 
  cout<<"平面坐标:"<<endl;
  cout<<"x="<<x<<endl;
  cout<<"y="<<y<<endl;
  cout<<"分度带号为:"<<endl;
  cout<<"优度带号为:"<<a<<endl;
  cout<<"三度带号为:"<<c<<endl;
  cout<<"通用坐标为(米):"<<endl;
  cout<<"x="<<x<<endl;
  cout<<"y="<<y+500000<<endl;     //通用坐标计算
 }

    else  if(n==2) /////////////////////反算
 {
  cout<<"请依次输入坐标x,y(m):"<<endl;
  cin>>xx>>yy;
  cout<<"请输入点所在投影带的中央子午线(度):"<<endl;
  cin>>L0;

  b=xx/6367558.4969;
        Bf=b+(50221746+(293622+(2350+22*cos(b)*cos(b))*cos(b)*cos(b))*cos(b)*cos(b))*(1.0E-10)*sin(b)*cos(b);
  Nf=6399698.902-(21562.267-(108.973-0.612*cos(Bf)*cos(Bf))*cos(Bf)*cos(Bf))*cos(Bf)*cos(Bf);
  Z=yy/(Nf*cos(Bf));
  b2=(0.5+0.00336975*cos(Bf)*cos(Bf))*sin(Bf)*cos(Bf);
  b3=0.333333-(0.1666667-0.001123*cos(Bf)*cos(Bf))*cos(Bf)*cos(Bf);
  b4=0.25+(0.161612+0.005617*cos(Bf)*cos(Bf))*cos(Bf)*cos(Bf);
  b5=0.2-(0.1667-0.00878*cos(Bf)*cos(Bf))*cos(Bf)*cos(Bf);
        BB=Bf*3600*180/3.141592654-(1-(b4-0.147*Z*Z)*Z*Z)*Z*Z*b2*180*3600/3.141592654;
  LL毕业论文http://www.youerw.com/  论文网http://www.youerw.com/
  C[1]=int((BB-C[0]*3600)/60);
  C[2]=int(BB-C[0]*3600-C[1]*60);
  cout<<"B="<<C[0]<<"度"<<C[1]<<"分"<<C[2]<<"秒"<<endl;

  D[0]=int(LL/3600);
  D[1]=int((LL-D[0]*3600)/60);
  D[2]=int(LL-D[0]*3600-D[1]*60);
  cout<<"L="<<D[0]<<"度"<<D[1]<<"分"<<D[2]<<"秒"<<endl;
 }
 return 0;
}四、成果:
   1、程序运行结果如下图:1260

高斯投影的正算反算C++源代码下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。