📄 jcview.cpp
字号:
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 + -