Files
matlab-learning/lab5/lab6.m
2025-11-26 19:01:27 +08:00

42 lines
1.1 KiB
Matlab

clear all;
[filename1,p1]=uigetfile('*.txt','选择尼康全站仪坐标文件名');
fp=fopen(strcat(p1,filename1),'r');
i=1;zb=[];
while ~feof(fp)
line=fgetl(fp);
my=findstr(line,',');
zb(i).dh=line(1:my(1)-1); % 点号
zb(i).x=str2num(line(my(1)+1:my(2)-1)); % X坐标
zb(i).y=str2num(line(my(2)+1:my(3)-1)); % Y坐标
zb(i).h=str2num(line(my(3)+1:my(4)-1)); % h坐标
zb(i).dm=line(my(4)+1:end); % 点名
i = i + 1;
end
fclose(fp);
% 计算国家坐标系坐标
a=3976223.453;
b=39512553.524;
rad=deg2rad(0.433267);
c=cos(rad);d=-sin(rad);lmd=1.000034336;
m=i-1;
gjzb=[];
for i=1:m;
gjzb(i).dh=zb(i).dh;
gjzb(i).dm=zb(i).dm;
gjzb(i).h=zb(i).h;
gjzb(i).x=a+lmd*(c*zb(1).x-d*zb(i).y);
gjzb(i).y=b+lmd*(d*zb(1).x+d*zb(i).y);
end
[filename2,p2]=uigetfile('*.txt','选择输出文件名');
fn=fopen(strcat(p2,filename2),'w');
fprintf(fn,'%s\n\n','点名 X(m) Y(m) H(mm) code');
for i=1:m
fprintf(fn,'%8s',gjzb(i).dh);
fprintf(fn,'%15.3f',gjzb(i).x);
fprintf(fn,'%16.3f',gjzb(i).y);
fprintf(fn,'%10.f',gjzb(i).h);
fprintf(fn,'%8s\n',gjzb(i).dm);
end
fclose(fn);