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

📄 jcview.cpp

📁 本程序实现了自动平差的功能
💻 CPP
📖 第 1 页 / 共 4 页
字号:
							       pjd->dianhao=pzd->czdian;
							       if(pzd->isknow)
								       pjd->isknow=true;
							       else
								       pjd->isknow=false;
							       jdarray.Add(pjd);
								 }
								}
					           	//从已知数据开始求节点
					          
						        if(!strcmp(qidstr,ljb.m_xian.GetAt(m_index1)->dxdian))
								{ 
						    	  
								  czd pczd=ljb.m_xian.GetAt(m_index1);
								  zzd pzzd=pczd->pzzdian;
								  czd p_cz=pczd;
								  CString p_dx;
								  CString p_dqstr;
								  
								  while(pzzd)
								  { double fwj=qishifwj;
								    double gcj=pzzd->myjiaodu;
								    p_dqstr=pzzd->dianhao;
									p_dx=qidstr;
                                    p_cz=pczd;
									while(1)
								  {
								     
								             
								             int p_index;
									         p_index=ljb.Findczd(p_dqstr);
									         if(p_index==-1)
												 break;
											 czd dqcz=ljb.m_xian.GetAt(p_index);

											 if(dqcz->istuidao)
											 { 
												 if(dqcz->du<2)
												     break;
												 else
													 break;//写弧
											 }
											 else
											 {
												 if(dqcz->isknow)
												 {   
													 if(dqcz->du<2)
													 {   double dqfwj;
													     
													     
														 if(!strcmp(p_cz->dxdian,p_dx))
														    dqfwj=fwj+liushizshi(gcj);
													
														  
														 
														 else 
														   dqfwj=fwj+2*pi-liushizshi(gcj);
														
														 
														 p_dx=p_cz->czdian;
														 p_cz=dqcz;
														 gcj=p_cz->pzzdian->myjiaodu;
														 if(!strcmp(p_dx,p_cz->dxdian))
														 
														     p_dqstr=p_cz->pzzdian->dianhao;

														 	 
														 else 
														 
															 p_dqstr=p_cz->dxdian;
														 
													     fwj=dqfwj+pi;
                                                     
													 
													 
													 dqcz->istuidao=true;
													 
													 }
													 else
													 {dqcz->isknow=true;
													  break;//写弧
													 }
												 }
												 else
												 {
													 if(dqcz->du<2)
													 {   double dqfwj;
														 if(!strcmp(p_cz->dxdian,p_dx))
														    dqfwj=fwj+liushizshi(gcj);
														  
														  
														 
														 else 
														    dqfwj=fwj+2*pi-liushizshi(gcj);
														  
														 
														 //CString str3;
													    // str3.Format("%f %s %s x=%f y=%f",dqfwj,p_dqstr,p_cz->czdian,p_cz->x,p_cz->y);
														 //MessageBox(str3);
														 dqcz->x=p_cz->x+cos(dqfwj)*chazhaojuli(&pjlarray,p_dqstr,p_cz->czdian);
														 dqcz->y=p_cz->y+sin(dqfwj)*chazhaojuli(&pjlarray,p_dqstr,p_cz->czdian);
														 
														 dqcz->istuidao=true;
														 gcj=dqcz->pzzdian->myjiaodu;
														 p_dx=p_cz->czdian;
														 p_cz=dqcz;
                                                         if(!strcmp(p_dx,p_cz->dxdian))
														 
														     p_dqstr=p_cz->pzzdian->dianhao;

														 	 
														 else 
														 
															 p_dqstr=p_cz->dxdian;
														 fwj=dqfwj+pi;

													 }
													 else
													 {   double dqfwj;
														 if(!strcmp(p_cz->dxdian,p_dx))
														      dqfwj=fwj+liushizshi(gcj);
														  
														  
														 
														 else 
														     dqfwj=fwj+2*pi-liushizshi(gcj);
													     //CString str3;
														//str3.Format("%s %s  %f",p_dqstr,p_cz->czdian,dqfwj);
														// MessageBox(str3);
												
														 dqcz->x=p_cz->x+cos(dqfwj)*chazhaojuli(&pjlarray,p_dqstr,p_cz->czdian);
														 dqcz->y=p_cz->y+sin(dqfwj)*chazhaojuli(&pjlarray,p_dqstr,p_cz->czdian);
														 dqcz->istuidao=true;
														 break;
									

													 }

												 }
											 }
			
											 
								  }


								    pzzd=pzzd->myzzdian;

								   }
              
							 }
 
							 //绘展点图
							 double maxx=0,maxy=0,minx=ljb.m_xian.GetAt(0)->x,miny=ljb.m_xian.GetAt(0)->y,max;

	                         for(int i=0;i<=ljb.m_xian.GetUpperBound();i++)
							 {
		                       if(ljb.m_xian.GetAt(i)->x>maxx)
		                           maxx=ljb.m_xian.GetAt(i)->x;
		                        if(ljb.m_xian.GetAt(i)->y>maxy)
	                               maxy=ljb.m_xian.GetAt(i)->y;
		                        if(ljb.m_xian.GetAt(i)->x<minx)
			                       minx=ljb.m_xian.GetAt(i)->x;
		                        if(ljb.m_xian.GetAt(i)->y<miny)
			                       miny=ljb.m_xian.GetAt(i)->y;

							 }
	                                max=maxx-minx;
		                        if((maxy-miny)>max)
			                         max=maxy-miny;
						      m_huituview->m_max=max;
							  m_huituview->m_maxx=maxx;
							  m_huituview->m_miny=miny;

							  m_huituview->m_myljb=&ljb;
							  m_huituview->m_yzarray=&m_myyzarray;
							  m_huituview->Invalidate();
							  
							  }
						  //平差
							  GetDlgItem(IDC_NEXT)->GetWindowText(commandstr);
	                          if(!strcmp(commandstr,"平差"))
							  {   int myxuhao=0;
							      for(int t=0;t<=ljb.m_xian.GetUpperBound();t++)
								  {
									  if(!ljb.m_xian.GetAt(t)->isknow)
									  {
										  myxuhao++;
										  ljb.m_xian.GetAt(t)->xuhao=myxuhao;
									  }
								   
								  }
 								  fangcheng m_fc;
                                 //写角度方程
								  CArray<double,double> m_changshu;//存放常数项
								  CArray<double,double> m_quan;//存放权
								  int myindex;
                                  for(int m_index=0;m_index<=ljb.m_xian.GetUpperBound();m_index++)
								  {
									  CString pdxstr=ljb.m_xian.GetAt(m_index)->dxdian;
                                      bool isczknow=false;
								      bool isdxknow=false;
								      bool iszzknow=false;
									  CString pzzstr;
									  double dx1,dx2,dx3,dx4;//放定向边系数
									  double t1,t2;//两条边的近似方位角
									  double czdx,czdy;//放测站点坐标
									  double dxdx,dxdy;//放定向点坐标或照准点坐标
									  double zx1,zx2,zx3,zx4;//放照准边系数
									  czdx=ljb.m_xian.GetAt(m_index)->x;
									  czdy=ljb.m_xian.GetAt(m_index)->y;
									  double jishibc;
									  if(ljb.m_xian.GetAt(m_index)->isknow)
									  {   
										  isczknow=true;
										  myindex=ljb.Findczd(pdxstr);
										  if(myindex!=-1)
										  {   
											  dxdx=ljb.m_xian.GetAt(myindex)->x;
											  dxdy=ljb.m_xian.GetAt(myindex)->y;
											  t1=atan2(dxdy-czdy,dxdx-czdx);
											  if(ljb.m_xian.GetAt(myindex)->isknow)
											  {dx1=0;dx2=0;dx3=0;dx4=0;isdxknow=true;
											  }
											  else
											  {
                                                
												dx1=0;
												dx2=0;
												dx3=po*(czdy-dxdy)/((dxdy-czdy)*(dxdy-czdy)+(dxdx-czdx)*(dxdx-czdx));
												dx4=po*(dxdx-czdx)/((dxdy-czdy)*(dxdy-czdy)+(dxdx-czdx)*(dxdx-czdx));
											  }
											  

										  }
										  else
										  {  bool isfind=false;
                                             for(int c=0;c<=m_myyzarray.GetUpperBound();c++)
											 {
                                                if(!strcmp(pdxstr,m_myyzarray.GetAt(c)->dianhao))
												{ isfind=true;
												  isdxknow=true;
                                                  dxdx=m_myyzarray.GetAt(c)->x;
												  dxdy=m_myyzarray.GetAt(c)->y;
												  
												}

											 }
											 if(!isfind)
											 {   CString cuostr;
											     cuostr.Format("不能处理支点  %s",pdxstr);
												 MessageBox(cuostr);
												 return;
											     
											 }		
												 
											 t1=atan2(dxdy-czdy,dxdx-czdx);
											     
                                             dx1=0;dx2=0;dx3=0;dx4=0;
										  }
										 
										  
									  }

									  //测站不是已知点
									  else
									  {    
										   myindex=ljb.Findczd(pdxstr);
										   if(myindex!=-1)
										   {  
											   dxdx=ljb.m_xian.GetAt(myindex)->x;
											   dxdy=ljb.m_xian.GetAt(myindex)->y;
											   t1=atan2(dxdy-czdy,dxdx-czdx);
											  if(ljb.m_xian.GetAt(myindex)->isknow)
											  {isdxknow=true;
											   jishibc=(dxdy-czdy)*(dxdy-czdy)+(dxdx-czdx)*(dxdx-czdx);
											   dx1=po*(dxdy-czdy)/jishibc;
											   dx2=po*(czdx-dxdx)/jishibc;
											   dx3=0;dx4=0;
											  }
											  else
											  { jishibc=(dxdy-czdy)*(dxdy-czdy)+(dxdx-czdx)*(dxdx-czdx);
                                                dx1=po*(dxdy-czdy)/jishibc;
												dx2=po*(czdx-dxdx)/jishibc;
												dx3=po*(czdy-dxdy)/jishibc;
												dx4=po*(dxdx-czdx)/jishibc;
											  }
											  

										   }
										    else
											{bool isfind=false;
                                             for(int c=0;c<=m_myyzarray.GetUpperBound();c++)
											 {
                                                if(!strcmp(pdxstr,m_myyzarray.GetAt(c)->dianhao))
												{ isfind=true;
												  isdxknow=true;
                                                  dxdx=m_myyzarray.GetAt(c)->x;
												  dxdy=m_myyzarray.GetAt(c)->y;
												}

											 }
											 if(!isfind)
											 {   CString cuostr;
											     cuostr.Format("不能处理支点  %s",pdxstr);
												 MessageBox(cuostr);
												 return;
											     
											 }
												 
											 t1=atan2(dxdy-czdy,dxdx-czdx);
											 jishibc=(dxdy-czdy)*(dxdy-czdy)+(dxdx-czdx)*(dxdx-czdx);
											 dx1=po*(dxdy-czdy)/jishibc;
									         dx2=po*(czdx-dxdx)/jishibc;
											 dx3=0;
											 dx4=0;
											} 


									  
									  }
                                      
									      if((dxdy-czdy)<0)
											t1+=2*pi;
									      
									   
                                     //照准点
									  if(ljb.m_xian.GetAt(m_index)->isknow)
									  {
										  zzd m_zzd=ljb.m_xian.GetAt(m_index)->pzzdian;
										  CString pzzstr;
										  while(m_zzd)
										  {    iszzknow=false;
											   pzzstr=m_zzd->dianhao;
											   myindex=ljb.Findczd(pzzstr);
										      if(myindex!=-1)
											  {   dxdx=ljb.m_xian.GetAt(myindex)->x;
												  dxdy=ljb.m_xian.GetAt(myindex)->y;
											      t2=atan2(dxdy-czdy,dxdx-czdx);
											      if(ljb.m_xian.GetAt(myindex)->isknow)
												  {zx1=0;zx2=0;zx3=0;zx4=0;iszzknow=true;
												  }
											      else
												  {
                                                    zx1=0;
												    zx2=0;
												    zx3=po*(czdy-dxdy)/((dxdy-czdy)*(dxdy-czdy)+(dxdx-czdx)*(dxdx-czdx));
												    zx4=po*(dxdx-czdx)/((dxdy-czdy)*(dxdy-czdy)+(dxdx-czdx)*(dxdx-czdx));
												  }
											  

											  }
										      else
											  {  bool isfind=false;
                                                for(int c=0;c<=m_myyzarray.GetUpperBound();c++)
												{
                                                if(!strcmp(pdxstr,m_myyzarray.GetAt(c)->dianhao))
												{ isfind=true;
												   iszzknow=true;
                                                  dxdx=m_myyzarray.GetAt(c)->x;
												  dxdy=m_myyzarray.GetAt(c)->y;
												}

												}
											    if(!isfind)
												{   CString cuostr;
											     cuostr.Format("不能处理支点  %s",pzzstr);
												 MessageBox(cuostr);
												 return;
											     
												}
												 
											    t2=atan2(dxdy-czdy,dxdx-czdx);
                                                zx1=0;zx2=0;zx3=0;zx4=0;
											  }
											  //写方程到邻接表
											  if(isczknow&&isdxknow&&iszzknow)
											  {
												  MessageBox("发现多余角度观测值,请检查!");
												  return;
											  }
											 xs p_xs1=NULL;
											 xs p_xs2=NULL;
											 
											 
											 if((dxdy-czdy)<0)
												 t2+=2*pi;
											  
												
										
											  if(!isczknow)
											 {  int czxuhao=ljb.m_xian.GetAt(m_index)->xuhao;
												p_xs1=new xishu;
												p_xs1->followxs=NULL;
												p_xs1->col=2*czxuhao-1;
												p_xs1->value=zx1-dx1;
												m_fc.m_array.Add(p_xs1);//以秒,米为单位
												
												p_xs2=new xishu;
												p_xs2->followxs=NULL;
												p_xs2->value=zx2-dx2;
												p_xs2->col=2*czxuhao;

												p_xs1->followxs=p_xs2;
												ASSERT(p_xs1);
												ASSERT(p_xs2);
											   
												


											}
											if(!isdxknow)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -