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

📄 calcux0y0.m

📁 利用MATLAB实现了对测量中的平面网
💻 M
字号:
function calcux0y0()           % 计算待定点的近似坐标
global net x0 y0 x y e d sid ms pp g f dir md s t az ma ed dd sd pn m1 m2 m3 ni si aa bb cc  
global pathname net_name x0y0_datafile
fit1=fopen(strcat(pathname,net_name,x0y0_datafile),'at');
if(fit1==-1)
    msgbox('Input File or Path is not correct','Warning','warn');
    return;
end          
format long e;
     point=[1:sd];
     xyknow=point(1:ed);
     xyunknow=point(ed+1:end);
    time=0;prelength=length(xyknow);non_orient=0;point_angle=0;
    while length(xyunknow)>0
  %% 基本思路:采用循环的方法逐一对每一个未知点进行以上各种方法条件的搜索,满足后即时解算。
       aa0=[];bb0=[];cc0=[];    
       time=time+1 ;        
       way=0;
       for i=xyunknow      
           %极坐标法 基本思路:找出或求出一个方位角,找出一条边。
                  temp1=[];temp2=[];temp3=[];temp4=[];temp5=[];temp6=[];temp7=[];temp8=[];temp9=[];temp10=[];A=[];B=[];P=[];
               %  第一步:寻找观测条件:两种情况,一是有已知方位角;二是由两个已知点及方向观测值推出方位角。
               if length(temp7)>0
                      temp8=find(xyknow==s(temp7(1)));
                      if length(temp8)>0
                          temp9=find((e==s(temp7(1))&d==t(temp7(1)))|(e==t(temp7(1))&d==s(temp7(1))));
                                if length(temp9)>0               %第一种情况:有已知方位角(一般适用于闭合导线)
                                    S=mean(sid(temp9));
                                    Alfa0=az(temp7(1));
                                    x0(i)=x0(s(temp7(1)))+S*cos(Alfa0);
                                    y0(i)=y0(s(temp7(1)))+S*sin(Alfa0);
                                    way=1;
                                    method(i)=11;             %---------->由已知方位角算出
                                end
                      end
                else
                  temp1=find(f==i);                        %第二种情况:由两个已知点及方向观测值推出方位角(适用于附合、支导线)
                  if length(temp1)>0
                         for j=xyknow
                             temp2=find(g(temp1)==j);
                             if temp2>0
                                    temp3(end+1)=temp1(temp2);
                             end
                         end                 %找到所有以已知点为起点、i为终点的方向值位置  
                         if length(temp3)>0
                             for j=temp3
                                    temp4=find((e==g(j)&d==f(j))|(e==f(j)&d==g(j)));
                                    if temp4>0                  %----------->找到一条观测边     
                                           temp5=g(j);
                                           for k=xyknow
                                               temp6=find(g==temp5&f==k);
                                               if temp6>0       %----------->找到另一个方向值位置
                                                      A=k;        B=temp5;
                                                      S=mean(sid(temp4));
                                                      dir1=dir(temp6);    dir2=dir(j);
                                                      way=1;
                                                      method(i)=12;    %-------->由两个已知点及方向观测值算得
                                                      break;
                                               end
                                           end
                                    end          
                              end
                          end
                   end
             % 第二步:按极坐标公式计算坐标 
                 if way==1
                         bet=beta(A,B,i);
                         deltax=x0(B)-x0(A);
                         deltay=y0(B)-y0(A);
                         a1=alfa(deltax,deltay);
                         b=dir2-dir1;
                         if b<0
                             b=b+2*pi;
                         end
                         if b<=pi
                             a2=a1+bet-pi;
                         else
                             a2=a1-bet+pi;
                         end
                         if a2<0
                             a2=a2+2*pi;
                         end
                         if a2>2*pi
                             a2=a2-2*pi;
                         end
                         x0(i)=x0(B)+S*cos(a2);
                         y0(i)=y0(B)+S*sin(a2);
                 end
             end
                 if way>0
                           temp=[];
                           xyknow(end+1)=i;
                           temp=find(xyunknow==i);
                           xyunknow(temp:end-1)=xyunknow(temp+1:end);
                           xyunknow=xyunknow(1:end-1);
                           break;   
                  end
              end
          end
%=========================================================保存近似坐标
fprintf(fit1,'                 近似坐标计算结果:\n');
fprintf(fit1,'   序号      点号          X0(m)            Y0(m)\n');
fprintf(fit1,'---------------------------------------------------------------\n');
for i=1:length(x0)
        fprintf(fit1,'%5d%10d%20.3f%20.3f\n',i,pn(i),x0(i),y0(i));
end
fprintf(fit1,'---------------------------------------------------------------\n');
fclose(fit1);
open(strcat(pathname,net_name,x0y0_datafile));
return

⌨️ 快捷键说明

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