⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jcview.cpp

📁 本程序实现了自动平差的功能
💻 CPP
📖 第 1 页 / 共 4 页
字号:
							 {
			                  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 + -