计算GDOP
#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的更多相关文章
- GPS精度因子(GDOP,PDOP,HDOP,VDOP,TDOP)
PDOP:位置精度因子(Position Dilution of Precision),直译为“精度强弱度”,通常翻译为“相对误差”.具体含义是:由于观测成果的好坏与被测量的人造卫星和接收仪间的几何形 ...
- 前端极易被误导的css选择器权重计算及css内联样式的妙用技巧
记得大学时候,专业课的网页设计书籍里面讲过css选择器权重的计算:id是100,class是10,html标签是5等等,然后全部加起来的和进行比较... 我只想说:真是误人子弟,害人不浅! 最近,在前 ...
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- C语言 · 薪水计算
问题描述 编写一个程序,计算员工的周薪.薪水的计算是以小时为单位,如果在一周的时间内,员工工作的时间不超过40 个小时,那么他/她的总收入等于工作时间乘以每小时的薪水.如果员工工作的时间在40 到50 ...
- C语言 · 阶乘计算 · 基础练习
问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个大整数a,A[0]表 ...
- C语言 · 最大值与最小值计算
输入11个整数,计算它们的最大值和最小值. 样例输入 0 1 2 3 4 5 6 7 8 9 10 样例输出 10 0 #include<stdio.h> int main(){ ]; ...
- 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。
异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...
- SQL Server-聚焦计算列或计算列持久化查询性能(二十二)
前言 上一节我们详细讲解了计算列以及计算列持久化的问题,本节我们依然如前面讲解来看看二者查询性能问题,简短的内容,深入的理解,Always to review the basics. 持久化计算列比非 ...
- SQL Server-聚焦计算列持久化(二十一)
前言 上一节我们结束了Hash Match Aggregate和Stream Aggregate的讲解,本系列我们来讲讲关于SQL Server中的计算列问题,简短的内容,深入的理解,Always t ...
随机推荐
- BZOJ.4695.最假女选手(线段树 Segment tree Beats!)
题目链接 区间取\(\max,\ \min\)并维护区间和是普通线段树无法处理的. 对于操作二,维护区间最小值\(mn\).最小值个数\(t\).严格次小值\(se\). 当\(mn\geq x\)时 ...
- [POJ1144]Network
来源:Central Europe 1996 思路:Tarjan求割点. 一个点$x$为割点当且仅当: 1.$x$为根结点且有两棵不相交的子树. 2.$x$不为根结点且它的子树中没有可以返回到$x$的 ...
- QQ和微信一键加群加好友代码
QQ和微信一键加群加好友链接代码实现. 1.QQ加群加好友链接(借助腾讯QQ群推广链接和加好友链接实现) (1).加群技术链接: http://qun.qq.com/join.html (2).加好友 ...
- lodoop打印控件详解
注意:使用此打印控件需要引入(在我上传的Demo中都有): install_lodop32.exe install_lodop64.exe LodopFuncs.js jquery-1.10.0.mi ...
- Chilkat----开源站点之VS2010 CKMailMan一个很好的邮件发送开源开发包
Chilkat 是一个很好的开源站点,有各种开源库. 开发语言主要有Classic ASP •C • C++ • C# • Delphi ActiveX • Delphi DLL • Visual F ...
- javascript中的回调函数(callback)
代码如下: app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; ...
- FieldExists
import arcpy import os import sys def FieldExists(TableName,FieldName): desc = arcpy.Describe(TableN ...
- h5语音录制及上传(Java版语音聊天系统)
Since Chrome version 47, Voice Recording works only on HTTPS sites 目前基于webikit(谷歌之类的webikit)和Gecko(F ...
- JQuery攻略(三)数组与字符串
在上两章,JQuery攻略(一) 基础知识——选择器 与 DOM 和 JQuery攻略(二) Jquery手册 我们为后面的章节打好了基础,在这一章节中,我们继续. 在这一章节中,我们记录的是JQue ...
- 详解UILabel的adjustsFontSizeToFitWidth值
详解UILabel的adjustsFontSizeToFitWidth值 UILabel有一个属性值,叫adjustsFontSizeToFitWidth,看着名字就知道,他是用来让文字自动适应UIL ...