📄 calcux0y0.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 + -