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

📄 jcview.cpp

📁 本程序实现了自动平差的功能
💻 CPP
📖 第 1 页 / 共 4 页
字号:
											{
												int dxindex=ljb.Findczd(pdxstr);
												ASSERT(dxindex!=-1);
												int dxxuhao=ljb.m_xian.GetAt(dxindex)->xuhao;
												if(p_xs1&&p_xs2)
												{
    											 p_xs1=NULL;
												 p_xs1=new xishu;
												 p_xs1->col=2*dxxuhao-1;
												 p_xs1->value=-dx3;
												 p_xs1->followxs=NULL;
												 p_xs2->followxs=p_xs1;
												 p_xs2=NULL;
												 p_xs2=new xishu;
												 p_xs2->col=2*dxxuhao;
												 p_xs2->value=-dx4;
												 p_xs2->followxs=NULL;
												 p_xs1->followxs=p_xs2;
												}
												else
												{
												  p_xs1=new xishu;
												  p_xs1->followxs=NULL;
												  p_xs1->col=2*dxxuhao-1;
												  p_xs1->value=-dx3;
												  m_fc.m_array.Add(p_xs1);
												
												  p_xs2=new xishu;
												  p_xs2->followxs=NULL;
												  p_xs2->value=-dx4;
												  p_xs2->col=2*dxxuhao;
 												  p_xs1->followxs=p_xs2;

												}
                                                  ASSERT(p_xs1);
												  ASSERT(p_xs2);

											}
											if(!iszzknow)
											{
												int zzindex=ljb.Findczd(pzzstr);
												ASSERT(zzindex!=-1);
												int zzxuhao=ljb.m_xian.GetAt(zzindex)->xuhao;
												if(p_xs1&&p_xs2)
												{
    											 p_xs1=NULL;
												 p_xs1=new xishu;
												 p_xs1->col=2*zzxuhao-1;
												 p_xs1->value=zx3;
												 p_xs1->followxs=NULL;
												 p_xs2->followxs=p_xs1;
												 p_xs2=NULL;
												 p_xs2=new xishu;
												 p_xs2->col=2*zzxuhao;
												 p_xs2->value=zx4;
												 p_xs2->followxs=NULL;
												 p_xs1->followxs=p_xs2;
												}
												else
												{
												  p_xs1=new xishu;
												  p_xs1->followxs=NULL;
												  p_xs1->col=2*zzxuhao-1;
												  p_xs1->value=zx3;
												  m_fc.m_array.Add(p_xs1);
												
												  p_xs2=new xishu;
												  p_xs2->followxs=NULL;
												  p_xs2->value=zx4;
												  p_xs2->col=2*zzxuhao;
 												  p_xs1->followxs=p_xs2;

												}
                                                  ASSERT(p_xs1);
												  ASSERT(p_xs2);
											}

												p_xs1=NULL;
												p_xs2=NULL;
												if((t2-t1)>=0)
												
													
													m_changshu.Add(((t2-t1)-liushizshi(m_zzd->myjiaodu))*po);//以秒为单位
												
												else
												   m_changshu.Add(((t2-t1)+2*pi-liushizshi(m_zzd->myjiaodu))*po);//以秒为单位
                                                
 													m_quan.Add(1);
												m_zzd=m_zzd->myzzdian;
										  }
										  
									   }  
                                       else
									   {   
										  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)
											  {iszzknow=true;
											   jishibc=(dxdy-czdy)*(dxdy-czdy)+(dxdx-czdx)*(dxdx-czdx);
											   zx1=po*(dxdy-czdy)/jishibc;
											   zx2=po*(czdx-dxdx)/jishibc;
											   zx3=0;zx4=0;
											  }
											  else
											  { jishibc=(dxdy-czdy)*(dxdy-czdy)+(dxdx-czdx)*(dxdx-czdx);
                                                zx1=po*(dxdy-czdy)/jishibc;
												zx2=po*(czdx-dxdx)/jishibc;
												zx3=po*(czdy-dxdy)/jishibc;
												zx4=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;
												   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);
											 jishibc=(dxdy-czdy)*(dxdy-czdy)+(dxdx-czdx)*(dxdx-czdx);
											 zx1=po*(dxdy-czdy)/jishibc;
									         zx2=po*(czdx-dxdx)/jishibc;
											 zx3=0;
											 zx4=0;
											} 
                                            //xiefangchengdaolinjiebiao
											 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)
											{
												int dxindex=ljb.Findczd(pdxstr);
												ASSERT(dxindex!=-1);
												int dxxuhao=ljb.m_xian.GetAt(dxindex)->xuhao;
												if(p_xs1&&p_xs2)
												{
    											 p_xs1=NULL;
												 p_xs1=new xishu;
												 p_xs1->col=2*dxxuhao-1;
												 p_xs1->value=-dx3;
												 p_xs1->followxs=NULL;
												 p_xs2->followxs=p_xs1;
												 p_xs2=NULL;
												 p_xs2=new xishu;
												 p_xs2->col=2*dxxuhao;
												 p_xs2->value=-dx4;
												 p_xs2->followxs=NULL;
												 p_xs1->followxs=p_xs2;
												}
												else
												{
												  p_xs1=new xishu;
												  p_xs1->followxs=NULL;
												  p_xs1->col=2*dxxuhao-1;
												  p_xs1->value=-dx3;
												  m_fc.m_array.Add(p_xs1);
												
												  p_xs2=new xishu;
												  p_xs2->followxs=NULL;
												  p_xs2->value=-dx4;
												  p_xs2->col=2*dxxuhao;
 												  p_xs1->followxs=p_xs2;

												}
                                                  ASSERT(p_xs1);
												  ASSERT(p_xs2);

											}
											if(!iszzknow)
											{
												int zzindex=ljb.Findczd(pzzstr);
												ASSERT(zzindex!=-1);
												int zzxuhao=ljb.m_xian.GetAt(zzindex)->xuhao;
												if(p_xs1&&p_xs2)
												{
    											 p_xs1=NULL;
												 p_xs1=new xishu;
												 p_xs1->col=2*zzxuhao-1;
												 p_xs1->value=zx3;
												 p_xs1->followxs=NULL;
												 p_xs2->followxs=p_xs1;
												 p_xs2=NULL;
												 p_xs2=new xishu;
												 p_xs2->col=2*zzxuhao;
												 p_xs2->value=zx4;
												 p_xs2->followxs=NULL;
												 p_xs1->followxs=p_xs2;
												}
												else
												{
												  p_xs1=new xishu;
												  p_xs1->followxs=NULL;
												  p_xs1->col=2*zzxuhao-1;
												  p_xs1->value=zx3;
												  m_fc.m_array.Add(p_xs1);
												
												  p_xs2=new xishu;
												  p_xs2->followxs=NULL;
												  p_xs2->value=zx4;
												  p_xs2->col=2*zzxuhao;
 												  p_xs1->followxs=p_xs2;


												}
                                                  ASSERT(p_xs1);
												  ASSERT(p_xs2);

												p_xs1=NULL;
												p_xs2=NULL;

											}

                                             //CString str;
											 //str.Format("t1=%f,t2=%f,%s,t2-t1=%15.10f,l=%15.10f,po=%d",t1,t2,pdxstr,t2-t1,liushizshi(m_zzd->myjiaodu),po);
											 //MessageBox(str);
											if((t2-t1)>=0)
											    m_changshu.Add(((t2-t1)-liushizshi(m_zzd->myjiaodu))*po);//以秒为单位
                                            else
												m_changshu.Add(((t2-t1)+2*pi-liushizshi(m_zzd->myjiaodu))*po);//以秒为单位

											m_quan.Add(1);
											m_zzd=m_zzd->myzzdian;
								
										}
									  
								
									 }
							
								}
					             
								// 把距离写入方程
								 double pblwucha=mydoc->m_blwucha;
								 double pgdwucha=mydoc->m_gdwucha;
								 double pjdwucha=mydoc->m_cjwucha;
								 double x1,y1,x2,y2;
								 double jx1,jx2,jx3,jx4;//存放距离系数
								 bool isshouknow=false;
								 bool ismoknow=false;
								 xs m_x1,m_x2;
								 m_x1=NULL;
								 m_x2=NULL;
							 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;
				                   COleVariant var1,var2,var3;
						            
					               
		                            while(!m_recordset->IsEOF())
									{      
			                    
                                       var1=m_recordset->GetFieldValue(0);
                                       var2=m_recordset->GetFieldValue(1);
                                       var3=m_recordset->GetFieldValue(2);
								       CString pshoustr,pmostr;
									   double pjuli;
									   pshoustr=CCrack::strVARIANT(var1);
									   pmostr=CCrack::strVARIANT(var2);
									   pjuli=atof(CCrack::strVARIANT(var3));
									   int sindex,mindex;
									   sindex=ljb.Findczd(pshoustr);
									   mindex=ljb.Findczd(pmostr);
									   if(sindex==-1||mindex==-1)
									   {   CString cwstr;
									       cwstr.Format("发现非法距离观测 从%s到%s",pshoustr,pmostr);
										   MessageBox(cwstr);
										   return;
									   }
                                       czd shouczd=ljb.m_xian.GetAt(sindex);
									   czd moczd=ljb.m_xian.GetAt(mindex);
									   x1=shouczd->x;
									   x2=moczd->x;
									   y1=shouczd->y;
									   y2=moczd->y;
									   double s0=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
									   m_changshu.Add(s0-pjuli);
									   m_quan.Add(pjdwucha*pjdwucha/(pgdwucha+pblwucha*pjuli/1000000)/(pgdwucha+pblwucha*pjuli/1000000));
                                       if(shouczd->isknow&&moczd->isknow)
									   {
										   MessageBox("发现多余观测值");
											   return;
									   }
                                        if(!shouczd->isknow)
										
										{   
											jx1=(x1-x2)/s0;
											jx2=(y1-y2)/s0;
											m_x1=new xishu;
											m_x1->col=2*shouczd->xuhao-1;
											m_x1->followxs=NULL;
											m_x1->value=jx1;
											m_fc.m_array.Add(m_x1);
											m_x2=new xishu;
											m_x2->col=2*shouczd->xuhao;
											m_x2->value=jx2;
											m_x2->followxs=NULL;
											m_x1->followxs=m_x2;
										}
										if(!moczd->isknow)
										
										{
											jx3=(x2-x1)/s0;
											jx4=(y2-y1)/s0;
											if(m_x1&&m_x2)
											{
												m_x1=NULL;
												m_x1=new xishu;
												m_x1->col=2*moczd->xuhao-1;
												m_x1->value=jx3;
												m_x1->followxs=NULL;
												m_x2->followxs=m_x1;
												m_x2=NULL;
												m_x2=new xishu ;
												m_x2->col=2*moczd->xuhao;
												m_x2->value=jx4;
												m_x2->followxs=NULL;
												m_x1->followxs=m_x2;

											}
											else 
											{
											 
											 m_x1=new xishu;
											 m_x1->col=2*moczd->xuhao-1;
											 m_x1->followxs=NULL;
										   	 m_x1->value=jx3;
											 m_fc.m_array.Add(m_x1);
											 m_x2=new xishu;
											 m_x2->col=2*moczd->xuhao;
											 m_x2->value=jx4;
											 m_x2->followxs=NULL;
											 m_x1->followxs=m_x2;

											}
										}
                                       ASSERT(m_x1);
									   ASSERT(m_x2);
									   m_x1=NULL;
									   m_x2=NULL;
														
								
								       m_recordset->MoveNext();
			                    
							  }

							 }
		                     catch(CDaoException* e)

⌨️ 快捷键说明

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