📄 jcview.cpp
字号:
{
e->ReportError();
e->Delete();
return;
}
m_recordset->Close();
//int cout =m_changshu.GetUpperBound();
// CString coustr;
// for(int num=0;num<=cout;num++)
// {
// coustr.Format("%f",m_changshu.GetAt(num));
// MessageBox(coustr);
// }
//求N,U
CArray<double,double> m_nzhen;//存放N阵
CArray<double,double> m_uzhen;//存放U阵
double lpl=0;//存放l(转)pl的值
int fccout=2*myxuhao;
for(int wps=0;wps<fccout;wps++)
m_uzhen.Add(0);
for(wps=0;wps<fccout*(1+fccout)/2;wps++)
m_nzhen.Add(0);
ASSERT(m_fc.m_array.GetUpperBound()==m_quan.GetUpperBound());
ASSERT(m_quan.GetUpperBound()==m_changshu.GetUpperBound());
for(wps=0;wps<=m_fc.m_array.GetUpperBound();wps++)
{
xs m_xs1,m_xs2;
m_xs1=m_fc.m_array.GetAt(wps);
m_xs2=NULL;
lpl+=pow(m_changshu.GetAt(wps),2)*m_quan.GetAt(wps);
while(m_xs1)
{
m_xs2=m_xs1->followxs;
int m_col1=m_xs1->col;
double m_value=m_nzhen.GetAt((m_col1-1)*m_col1/2+m_col1-1);
m_nzhen.SetAt((m_col1-1)*m_col1/2+m_col1-1,m_value+pow(m_xs1->value,2)*m_quan.GetAt(wps));
m_value=m_uzhen.GetAt(m_col1-1);
m_uzhen.SetAt(m_col1-1,m_value+m_xs1->value*m_quan.GetAt(wps)*m_changshu.GetAt(wps));
int m_col2;
while(m_xs2)
{
m_col2=m_xs2->col;
if(m_col1>m_col2)
{int r=m_col1;m_col1=m_col2;m_col2=r;
}
m_value=m_nzhen.GetAt((m_col2-1)*m_col2/2+m_col1-1);
m_nzhen.SetAt((m_col2-1)*m_col2/2+m_col1-1,m_value+m_xs1->value*m_xs2->value*m_quan.GetAt(wps));
m_xs2=m_xs2->followxs;
}
m_xs1=m_xs1->followxs;
}
}
//求解
double m_sum=0;
double p_value1=0;
double p_value2=0;
double p_value3=0;
double p_value4=0;
double vpv=0;//存放V(转)PV的值
//约化N
for(int m_row=1;m_row<=2*myxuhao;m_row++)
for(int m_col=1;m_col<=m_row;m_col++)
{
m_sum=0;
p_value1=m_nzhen.GetAt((m_row-1)*m_row/2+m_col-1);
for(int pre=1;pre<m_col;pre++)
{ p_value2=m_nzhen.GetAt((m_row-1)*m_row/2+pre-1);
p_value3=m_nzhen.GetAt((m_col-1)*m_col/2+pre-1);
p_value4=m_nzhen.GetAt((pre-1)*pre/2+pre-1);
m_sum+=p_value2*p_value3/p_value4;
}
p_value1-=m_sum;
m_nzhen.SetAt((m_row-1)*m_row/2+m_col-1,p_value1);
}
//约化U
ASSERT(2*myxuhao==m_uzhen.GetUpperBound()+1);
for(m_row=1;m_row<=2*myxuhao;m_row++)
{
m_sum=0;
p_value1=m_uzhen.GetAt(m_row-1);
for(int pre=1;pre<m_row;pre++)
{
p_value2=m_uzhen.GetAt(pre-1);
p_value3=m_nzhen.GetAt((m_row-1)*m_row/2+pre-1);
p_value4=m_nzhen.GetAt((pre-1)*pre/2+pre-1);
m_sum+=p_value2*p_value3/p_value4;
}
p_value1-=m_sum;
m_uzhen.SetAt(m_row-1,p_value1);
}
//求X
CArray<double,double> m_xyarray;//放x,y平差值
for(m_row=1;m_row<=2*myxuhao;m_row++)
m_xyarray.Add(0);
for(m_row=2*myxuhao;m_row>0;m_row--)
{
p_value1=m_uzhen.GetAt(m_row-1);
m_sum=0;
for(int k=m_row+1;k<=2*myxuhao;k++)
{
p_value2=m_xyarray.GetAt(k-1);
p_value3=m_nzhen.GetAt((k-1)*k/2+m_row-1);
m_sum+=p_value2*p_value3;
}
p_value4=m_nzhen.GetAt((m_row-1)*m_row/2+m_row-1);
p_value1=-(p_value1+m_sum)/p_value4;
m_xyarray.SetAt(m_row-1,p_value1);
}
//求V(转)PV
m_sum=0;
for(m_row=1;m_row<=2*myxuhao;m_row++)
{
p_value1=m_uzhen.GetAt(m_row-1);
p_value2=m_nzhen.GetAt((m_row-1)*m_row/2+m_row-1);
m_sum=p_value1*p_value1/m_sum;
}
vpv=lpl-m_sum;
//CString str;
///for(m_row=1;m_row<=2*myxuhao;m_row++)
//{
// str.Format("%f",m_xyarray.GetAt(m_row-1));
// MessageBox(str);
//}
double danweiquan=0;//单位权方差
danweiquan=vpv/(m_fc.m_array.GetUpperBound()-2*myxuhao+1);
CString str;
str.Format("%f",danweiquan);
MessageBox(str);
//写入数据库
if(m_recordset->IsOpen())
m_recordset->Close();
try
{
CString strselect(_T("Select * From["));
strselect+="平差成果";
strselect+=_T("]");
m_recordset->Open(dbOpenDynaset,strselect);
if(!m_recordset->CanUpdate())
return;
while(!m_recordset->IsEOF())
{
m_recordset->Delete();
m_recordset->MoveNext();
}
for(int row=0;row<=ljb.m_xian.GetUpperBound();row++)
{
int hang=ljb.m_xian.GetAt(row)->xuhao;
if(hang)
{
CString strsql;
CString str1,str2,str3,str4;
str1=ljb.m_xian.GetAt(row)->czdian;
str2.Format("%f",ljb.m_xian.GetAt(row)->x-m_xyarray.GetAt(2*hang-2));
str3.Format("%f",ljb.m_xian.GetAt(row)->y-m_xyarray.GetAt(2*hang-1));
str4="0";
strsql.Format("insert into 平差成果(点号,X,Y,高程)values('%s','%s','%s','%s')",str1,str2,str3,str4);
m_database->Execute(strsql,dbDenyWrite|dbConsistent);
}
}
for(int myrow=0;myrow<=m_myyzarray.GetUpperBound();myrow++)
{
CString strq;
CString str1,str2,str3,str4;
str1=m_myyzarray.GetAt(myrow)->dianhao;
str2.Format("%f",m_myyzarray.GetAt(myrow)->x);
str3.Format("%f",m_myyzarray.GetAt(myrow)->y);
str4="0";
strq.Format("insert into 平差成果(点号,X,Y,高程)values('%s','%s','%s','%s')",str1,str2,str3,str4);
m_database->Execute(strq,dbDenyWrite|dbConsistent);
}
}
catch(CDaoException* e)
{
e->ReportError();
e->Delete();
return;
}
m_recordset->Close();
//1) 求C阵
//CString quanstr;
//for(m_row=0;m_row<=m_quan.GetUpperBound();m_row++)
//{
// quanstr.Format("%f",m_quan.GetAt(m_row));
// MessageBox(quanstr);
// }
//CArray<double,double> m_czhen;
//CString hstr;
// for(m_row=0;m_row<=m_nzhen.GetUpperBound();m_row++)
// {
// hstr.Format("%f",m_nzhen.GetAt(m_row));
// MessageBox(hstr);
// }
for(m_row=1;m_row<=2*myxuhao;m_row++)
{
p_value1=m_nzhen.GetAt((m_row-1)*m_row/2+m_row-1);
p_value1=1/sqrt(p_value1);
m_nzhen.SetAt((m_row-1)*m_row/2+m_row-1,p_value1);
for(int pre=1;pre<m_row;pre++)
{
m_sum=0;
//p_value1=
for(int m_col=pre;m_col<m_row;m_col++)
{
p_value2=m_nzhen.GetAt((m_col-1)*m_col/2+m_col-1);
p_value3=m_nzhen.GetAt((m_col-1)*m_col/2+pre-1);
p_value4=m_nzhen.GetAt((m_row-1)*m_row/2+m_col-1);
m_sum+=p_value2*p_value3*p_value4;
}
p_value2=-p_value1*m_sum;
m_nzhen.SetAt((m_row-1)*m_row/2+pre-1,p_value2);
}
}
//求Q阵
for(m_row=1;m_row<=2*myxuhao;m_row++)
for(int m_col=1;m_col<=m_row;m_col++)
{
m_sum=0;
for(int prow=m_row;prow<=2*myxuhao;prow++)
{p_value1=m_nzhen.GetAt((prow-1)*prow/2+m_row-1);
p_value2=m_nzhen.GetAt((prow-1)*prow/2+m_col-1);
m_sum+=p_value1*p_value2;
}
m_nzhen.SetAt((m_row-1)*m_row/2+m_col-1,m_sum);
}
//求极大值方向
CArray<double,double> m_jdzarray;
CStringArray m_earray;
CStringArray m_farray;
for(m_row=1;m_row<=myxuhao;m_row++)
{
double jizhi=atan2(2*m_nzhen.GetAt((2*m_row-1)*m_row+2*m_row-2),m_nzhen.GetAt((m_row-1)*(2*m_row-1)+2*m_row-2)-m_nzhen.GetAt((2*m_row-1)*m_row+2*m_row-1));
if(jizhi<0)
jizhi+=2*pi;
if(m_nzhen.GetAt((2*m_row-1)*m_row+2*m_row-2)>0)
{if(jizhi<pi/2)
m_jdzarray.Add(jizhi);
else if(jizhi>=pi&&jizhi<3*pi/2)
m_jdzarray.Add(jizhi);
else m_jdzarray.Add(jizhi-pi/2);
}
else if(jizhi>0)
{
if(jizhi>3*pi/2)
m_jdzarray.Add(jizhi);
else if(jizhi>=pi/2&&jizhi<pi)
m_jdzarray.Add(jizhi);
else m_jdzarray.Add(jizhi+pi/2);
}
else
{ if(m_nzhen.GetAt((m_row-1)*(2*m_row-1)+2*m_row-2)>m_nzhen.GetAt((2*m_row-1)*m_row+2*m_row-1))
m_jdzarray.Add(0);
else
m_jdzarray.Add(pi/2);
}
double kzhi=0;
kzhi=sqrt(pow(m_nzhen.GetAt((m_row-1)*(2*m_row-1)+2*m_row-2)-m_nzhen.GetAt((2*m_row-1)*m_row+2*m_row-1),2)+pow(m_nzhen.GetAt((2*m_row-1)*m_row+2*m_row-2),2)*4);
CString estr,fstr;
estr.Format("%7.3f",sqrt(danweiquan*(m_nzhen.GetAt((m_row-1)*(2*m_row-1)+2*m_row-2)+m_nzhen.GetAt((2*m_row-1)*m_row+2*m_row-1)+kzhi)/2));
m_earray.Add(estr);
fstr.Format("%7.3f",sqrt(danweiquan*(m_nzhen.GetAt((m_row-1)*(2*m_row-1)+2*m_row-2)+m_nzhen.GetAt((2*m_row-1)*m_row+2*m_row-1)-kzhi)/2));
m_farray.Add(fstr);
}
//写入数据库
ASSERT(m_earray.GetUpperBound()==myxuhao-1);
if(m_recordset->IsOpen())
m_recordset->Close();
try
{
CString strselect(_T("Select * From["));
strselect+="精度";
strselect+=_T("]");
m_recordset->Open(dbOpenDynaset,strselect);
if(!m_recordset->CanUpdate())
return;
while(!m_recordset->IsEOF())
{
m_recordset->Delete();
m_recordset->MoveNext();
}
for(m_row=0;m_row<=ljb.m_xian.GetUpperBound();m_row++)
{
if(!ljb.m_xian.GetAt(m_row)->xuhao)
continue;
CString sqlstr;
CString pstr1,pstr2,pstr3,pstr4,pstr5;
pstr1=ljb.m_xian.GetAt(m_row)->czdian;
pstr2=m_earray.GetAt(ljb.m_xian.GetAt(m_row)->xuhao-1);
pstr3=m_earray.GetAt(ljb.m_xian.GetAt(m_row)->xuhao-1);
pstr4.Format("%7.3f",m_jdzarray.GetAt(ljb.m_xian.GetAt(m_row)->xuhao-1));
pstr5.Format("%7.3f",sqrt(atof(pstr2)*atof(pstr2)+pow(atof(pstr3),2)));
sqlstr.Format("insert into 精度(点号,长半轴,短半轴,极大值方向,点位中误差)values('%s','%s','%s','%s','%s')",pstr1,pstr2,pstr3,pstr4,pstr5);
m_database->Execute(sqlstr,dbDenyWrite|dbConsistent);
}
}
catch(CDaoException* e)
{
e->ReportError();
e->Delete();
return;
}
m_recordset->Close();
}
CString tufilename;
tufilename=mydoc->m_workname+_T("展点图.bmp");
m_huituview->Mysave(tufilename);
m_database->Close();
if(m_recordset->IsOpen())
m_recordset->Close();
delete m_database;
delete m_recordset;
}
void CJcView::OnJieshu()
{
// TODO: Add your control notification handler code here
CMainFrame* p_mainfrm;
p_mainfrm=(CMainFrame*)AfxGetApp()->m_pMainWnd;
ASSERT(p_mainfrm);
CChildFrame* pchildframe;
pchildframe=(CChildFrame*)p_mainfrm->GetActiveFrame();
ASSERT(pchildframe);
pchildframe->SetVisibleView(pchildframe->m_rightpaneview,pchildframe->m_pcview);
}
void fangcheng::DeleteAllItems()
{
for(int i=0;i<=m_array.GetUpperBound();i++)
{
xs p_sx=m_array.GetAt(i);
xs p_oldsx=NULL;
while(p_sx)
{
p_oldsx=p_sx;
p_sx=p_sx->followxs;
delete p_oldsx;
}
}
m_array.RemoveAll();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -