最近写的一个小程序,主要用来对测距仪的测量数据进行检测.
采用的是6段解析法.
光电测距仪提供的观测成果包括:
1、测段号
2、基线长
3、观测长
4、盘左
5、盘右
6、温度值
7、气压值
按照6段解析法的要求,选取21条测段数据。
处理代码如下:
typedef struct{
char
dh[3]; //段号
double
jxc; //基线长
double gcc;
//观测基线长
double
pz[2];//垂直盘左
double
py[2];//垂直盘右
double
qw;//气温
double
qy;//气压
}DATA;
/////////////////////////
//计算加乘常数
/////////////////////////
//1.距离改正
//
double czj;
int i;
for(i=0;i<len;i++)
{
czj=(Radian(data[i].py[0])-Radian(data[i].pz[0]))/2.0-PI/2.0;
if(m_czj>1)
{
czj+=(Radian(data[i].py[0])-Radian(data[i].pz[0]))/2.0-PI/2.0;
czj/=2.0;
}
data[i].gcc*=cos(czj);
}
//////////////////////////////
//2.气温气压改正
double k,a,b,c;
CString s1,s2;
strQWGS.TrimLeft(' ');
s1=strQWGS;
i=s1.Find(' ');
k=atof(s1.Left(i));
s2=s1.Right(s1.GetLength()-i);
s2.TrimLeft(' ');
s1=s2;
i=s1.Find(' ');
a=atof(s1.Left(i));
s2=s1.Right(s1.GetLength()-i);
s2.TrimLeft(' ');
s1=s2;
i=s1.Find(' ');
b=atof(s1.Left(i));
s2=s1.Right(s1.GetLength()-i);
s2.TrimLeft(' ');
c=atof(s2);
double ppm=1.0/10000000;
//qy:百帕 qw:摄氏度
for(i=0;i<len;i++)
{
data[i].gcc*=k-a*b*ppm*data[i].qy/(1.0+c*data[i].qw);
}
/////////////////////////////////
//3.计算d y yi
double d=0,y=0;
yi=new double[len];
for(i=0;i<len;i++)
{
yi[i]=data[i].jxc-data[i].gcc;
d+=data[i].gcc;
y+=yi[i];
}
d/=double(len);
y/=double(len);
///////////////////////////////
//4.计算 c r;
double C=0,R=0,xd=0;
double d2=0,dy=0,y2=0;
for(i=0;i<len;i++)
{
d2+=data[i].gcc*data[i].gcc;
y2+=yi[i]*yi[i];
dy+=data[i].gcc*yi[i];
xd+=data[i].gcc*data[i].jxc;
}
C=(y*d2-d*dy)/(d2-len*d*d);
//加常数
R=(dy-len*d*y)/(d2-len*d*d);
//乘常数
//////////////////////////////////
//5.计算权系数
double Q11=0,Q22=0,Q12=0;
Q11=d2/(len*d2-len*len*d*d);
Q22=1.0/(d2-len*d*d);
Q12=-len*d/(len*d2-len*len*d*d);
/////////////////////////////
//6.计算单位权中误差
double V2=0;
V2=y2-len*y*C-dy*R;
double M0=0;
M0=sqrt(V2/(len-2));
//////////////////////////////////////
//7.协方差估计
double MC=0,MR=0,MCR=0;
MC=M0*sqrt(Q11);
MR=M0*sqrt(Q22);
MCR=M0*M0*Q12;
////////////////////////////////////////////
//8.基线值与观测值之差与r的相关检验
double PCR=0;
PCR=(dy-len*y*d)/sqrt((d2-len*d*d)*(y2-len*y*y));
///////////////////////////////////////////////
//9.用t检验法检验仪器常数的显著性
double T1=0,T2=0;
T1=C/MC;
T2=R/MR;
其他的都是些显示和打印的内容,还有不少东西值得总结。