#include <iostream>
#include <fstream>
#include "..\include\CPosition.h"
#include "..\include\Constant.h"
#include "..\include\Data.h"
#include<stdio.h>
#define MATHRES 1E-12
#define FOUR 4
typedf struct{ int prn;
XYZCoor pos;
}SVPosStruct;
int Maxsat;
int ReadSatPosFile(FILE*SVPosFile,SVPosStruct*SV);
int fun(int n);
void ComputeDOP2(XYZCoor Obs,XYZCoor SV[],DOPStruct*DOP);
void main()
{ double a=6378137.0;
double e2=0.00669342162297;
double PAI=3.1415926535898;
double P0=PAI/180.0;
double N;
XYZCoor ObsPos;
int LatDeg,LonDeg,LatMin,LonMin;
float LatSec,LonSec,H,B,L;
FILE*SVPosFile,*SVDOPFile;
int i,j,k,ri,num;
int array[];
int temp;
XYZCoor SV[];
int SVNo[];
SVPosStruct*SVPos;
DOPStruct DOP;
prinf("Please Input local Lat(dd mm.mmmm):");
scanf("%i %f",&LatDeg,&LatMin);
B=((float)LatDeg+LatMin/60.0)*P0;
prinf("Please Input local Lon(ddd mm.mmmm):");
scanf("%i %f",&LonDeg,&LonMin);
L=((float)LonDeg+LonMin/60.0)*P0;
prinf("Please Input local Height(meter):");
scanf("%f",&H);
B=(LatDeg+LatMin/60.0+LatSec/3600.0)*P0;
L=(LonDeg+LonMin/60.0+LonSec/3600.0)*P0;
N=a/sqr(1.0-e2*sin(B)*sin(B));
ObsPos.X=(N+H)*cos(B)*cos(L);
ObsPos.Y=(N+H)*cos(B)*sin(L);
ObsPos.Z=(N*(1.0-e2)+H)*sin(B);
if((SVPosFile=fopen("satpos.out","r"))==NULL)
{
prinf("cannot open input file\n");
exit(); }
if((SVDOPFile=fopen("satdop.out","w"))==NULL)
{
prinf("cannot open output file\n");
exit(); }
if((SVPos=(SVPosStruct*)malloc(sizeof(SVPosStruct)*))==NULL)
{
prinf("not enough memory to allocate buffer\n");
exit(); }
MaxSat=;
i=;
do
{ if(ReadSatPosFile(SVPosFile,(SVPos+i)))break;
i++;
if(i>=)break; }while();
if(MaxSat<)
{
prinf("not enough satellite to compute DOP\n");
exit(); }
num=fun(MaxSat)/(fun(MaxSat-)*fun());
fprinf(SVDOPFile,"SV Combinnation GDOP\n");
ri=;
array[]=MaxSat;
do
{ if(ri!=FOUR)
if((ri+array[ri])>FOUR)
{
array[ri+]=array[ri]-;
ri++: }
else
{
ri--;array[ri]--;
}
else
{
for(j=;j<=FOUR;j++)
{
SVNo[j-]=(SVPos+array[j]-)->prn;
SV[j-].X=(SVPos+array[j]-)->pos.X
SV[j-].Y=(SVPos+array[j]-)->pos.Y
SV[j-].Z=(SVPos+array[j]-)->pos.Z; }
ComputeDOP2(ObsPos,SV,&DOP);
fprinf(SVDOPFile,"%02d %02d-%02d-%02d %6.1f\n",SVNo[],SVNo[],SVNo[],SVNo[],DOP.GDOP);
if(array[FOUR]--)
{
ri--;array[ri]--;
}
else
{
array[ri]--;
} } }while(array[]!=FOUR-);
fclose(SVPosFile);
fclose(SVDOPFile);
free(SVPos);
int fun(int n)
{
int i;
int res;
if(n<)return0;
res=;
for(i=;i<=n;i++)res*=i;
return res; }
int ReadSatPosFile(FILE*SVPosFile,SVPosStruct*SV)
{
char t1[],t2[],t3[];
if(fscanf(SVPosFile,"%d%s%s%s\n",&SV->prn,t1,t2,t3))
return ;
SV->pos.X=atof(t1);
SV->pos.Y=atof(t2);
SV->pos.Z=atof(t3);
MaxSat++;
if(MaxSat>=)return ;
return ; }
void ComputeDOP2(XYZCoor Obs.XYZCoor SV[],DOPStract*DOP)
{
double PAI=3.1415926535898;
double P0=PAI/180.0;
int Row=,Col=;
int n=Row;
double Qp[][];
double Qpt[][];
double QptXQp[][];
double Q[][];
int i,j,k,ii,jj;
double Temp;
double b,max,A[][];
int *z;
for(i=;i<Row;i++)
{
Temp=sqrt((Obs.X-SV[i].X)*(Obs.X-SV[i].X)+(Obs.Y-SV[i].Y)*(Obs.X-SV[i].Y)+(Obs.Z-SV[i].Z)*(Obs.X-SV[i].Z));
Qp[i][]=(SV[i].X-Obs.X)/Temp;
Qp[i][]=(SV[i].Y-Obs.Y)/Temp;
Qp[i][]=(SV[i].Z-Obs.Z)/Temp;
Qp[i][]=1.0; }
for(i=;i<Row;i++)
for(j=;j<Col;j++)
Qpt[i][j]=Qpt[j][i];
for(i=;i<Row;i++)
{
for(j=;j<Col;j++)
{
Temp=0.0;
for(k=;k<;k++)Temp=Qpt[i][k]*Qp[k][j];
QptXQp[i][j]=Temp; } }
z=(int*)malloc(sizeof(int)**n);
for(i=;i<Row;i++)
{
for(j=;j<Col;j++)
A[i][j]=QptXQp[j][i]; }
for(k=;k<n;k++)
{
max=;
for(i=k;i<n;i++)
for(j=k;j<n;j++)
{
b=fabs(A[i][j]);
if(max<b)
{
ii=i;jj=j;max=b; } }
if(max<MATHRES)
{
free(z);
prinf(The matrix isn't rank enough..."); }
max=1.0/((A[ii][jj]));
A[ii][jj]=;
z[*k]=ii;
A[*k+]=jj
if(ii!=k)
{
for(j=;j<n;j++)
{
b=A[ii][j];A[ii][j]=A[k][j];A[k][j]=b; } }
if(jj!=k)
{
for(j=;j<n;j++)
{
b=A[j][jj];A[jj][j]=A[j][k];A[j][k]=b; } }
for(j=;j<n;j++)
A[k][j]*=max;
for(i=;i<n;i++)
{
if(i!=k)
{
max=A[i][k]; A[i][k]=0.0;
for(j=;j<n;j++) A[i][j]=A[i][j]-max*A[k][j]; } }
for(k=n-;k>=;k--)
{
ii=z[*k+];jj=[*k];
if(ii!=k)
{
for(j=;j<n;j++)
{
b=A[ii][j];A[ii][j]=A[k][j];A[k][j]=b; } }
if(jj!=k)
{
for(j=;j<n;j++)
{
b=A[j][ii];A[j][ii]=A[j][k];A[j][k]=b; } } }
for(i=;i<Row;i++)
{
for(j=;j<Col;j++)
Q[i][j]=A[i][j]; }
free(z);
Temp=0.0;for(i=;i<n;i++)Temp+=Q[i][i];DOP->GDOP=sqrt(Temp); }

计算GDOP的更多相关文章

  1. GPS精度因子(GDOP,PDOP,HDOP,VDOP,TDOP)

    PDOP:位置精度因子(Position Dilution of Precision),直译为“精度强弱度”,通常翻译为“相对误差”.具体含义是:由于观测成果的好坏与被测量的人造卫星和接收仪间的几何形 ...

  2. 前端极易被误导的css选择器权重计算及css内联样式的妙用技巧

    记得大学时候,专业课的网页设计书籍里面讲过css选择器权重的计算:id是100,class是10,html标签是5等等,然后全部加起来的和进行比较... 我只想说:真是误人子弟,害人不浅! 最近,在前 ...

  3. 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  4. C语言 · 薪水计算

    问题描述 编写一个程序,计算员工的周薪.薪水的计算是以小时为单位,如果在一周的时间内,员工工作的时间不超过40 个小时,那么他/她的总收入等于工作时间乘以每小时的薪水.如果员工工作的时间在40 到50 ...

  5. C语言 · 阶乘计算 · 基础练习

    问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个大整数a,A[0]表 ...

  6. C语言 · 最大值与最小值计算

    输入11个整数,计算它们的最大值和最小值. 样例输入 0 1 2 3 4 5 6 7 8 9 10 样例输出 10 0   #include<stdio.h> int main(){ ]; ...

  7. 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...

  8. SQL Server-聚焦计算列或计算列持久化查询性能(二十二)

    前言 上一节我们详细讲解了计算列以及计算列持久化的问题,本节我们依然如前面讲解来看看二者查询性能问题,简短的内容,深入的理解,Always to review the basics. 持久化计算列比非 ...

  9. SQL Server-聚焦计算列持久化(二十一)

    前言 上一节我们结束了Hash Match Aggregate和Stream Aggregate的讲解,本系列我们来讲讲关于SQL Server中的计算列问题,简短的内容,深入的理解,Always t ...

随机推荐

  1. STL中优先队列的使用

    普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有最高级先出的行为特征.我们来说一下C++的 ...

  2. Educational Codeforces Round 14 C. Exponential notation 数字转科学计数法

    C. Exponential notation 题目连接: http://www.codeforces.com/contest/691/problem/C Description You are gi ...

  3. 数据库操作类——C#

    整理数据库操作类以便取用: using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...

  4. 基于Servlet+JSP+JavaBean开发模式的用户登录注册

    http://www.cnblogs.com/xdp-gacl/p/3902537.html 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBea ...

  5. 李善友《认知升级之第一性原理》--507张PPT全解!_搜狐科技_搜狐网

      http://www.sohu.com/a/151470602_733114

  6. 性能优化:使用SparseArray代替HashMap<Integer,Object>(转)

    HashMap是java里比较常用的一个集合类,我比较习惯用来缓存一些处理后的结果.最近在做一个Android项目,在代码中定义这样一个变量,实例化时,Eclipse却给出了一个 performanc ...

  7. C# webrequest 抓取数据时,多个域Cookie的问题

    最近研究了下如何抓取为知笔记的内容,在抓取笔记里的图片内容时,老是提示403错误,用Chorme的开发者工具看了下: 这里的Cookie来自两个域,估计为知那边是验证了token(登录后才能获取到to ...

  8. 使用JavaScript的数组实现数据结构中的队列与堆栈

    今天在项目中要使用JavaScript实现数据结构中的队列和堆栈,这里做一下总结. 一.队列和堆栈的简单介绍 1.1.队列的基本概念 队列:是一种支持先进先出(FIFO)的集合,即先被插入的数据,先被 ...

  9. CPU和线程的关系

    比如,电脑开了两个程序qq和qq音乐,假设这两个程序都只有一个线程.人能够感觉到CPU切换的频率是一秒一次,假设当前cpu计算速度是1秒1次,那么我们就能明显感到卡顿,当聊天,点击发送按钮时候,qq音 ...

  10. WordPress主题开发:更换后台编辑器

    这里我更换为KindEditor 1.下载插件 https://wordpress.org/plugins/kindeditor-for-wordpress/ 2.解压至wordpress目录下的/w ...