• 工作总结
  • 工作计划
  • 心得体会
  • 述职报告
  • 申请书
  • 演讲稿
  • 讲话稿
  • 领导发言
  • 读后感
  • 观后感
  • 事迹材料
  • 党建材料
  • 策划方案
  • 对照材料
  • 不忘初心
  • 主题教育
  • 脱贫攻坚
  • 调查报告
  • 疫情防控
  • 自查报告
  • 工作汇报
  • 党史学习
  • 当前位置: 达达文档网 > 文档下载 > 心得体会 > 正文

    基于matlab坐标正反算

    时间:2021-04-13 04:01:42 来源:达达文档网 本文已影响 达达文档网手机站

      测量程序设计 实验报告 实验名称:坐标正反算 实验三 坐标正反算 一、实验目的 编写坐标正反算程序,并对格式化文件数据进行计算,验证程序。

    二、实验内容 1、编写坐标正算程序 1)
    建立以xy_direct命名的函数,函数输入输出格式为 [x2,y2] = xy_direct(x1,y1,distance, azimuth) 度转度分秒:
    >> function dms= degree2dms(jiaodu) >>degree = fix(jiaodu); >>mimute = fix((jiaodu-degree)*60); >>second = ((jiaodu-degree)*60-mimute)*60; >>dms = degree+mimute/100+second/10000; 度分秒转度:
    >> function degree = dms2degree(jiaodu) >>degree = fix(jiaodu); >> mimute = fix((jiaodu-degree)*100); >>second = (jiaodu-degree-mimute/100)*10000; >>degree = degree+mimute/60+second/3600; 弧度转度:
    >> function dms=rad2dms(rad) >> rad=abs(rad); >> jiaodu=rad*180.0/pi; >> % l=fix(a) >> % b=(a-l)*60.0 >> % m=fix(b) >> % a=l+m/100.0+(b-m)*0.006 >> % if(rad<0) >> % dms=-a; >> % else >> % dms=a; >> % end >> degree = fix(jiaodu); >> mimute = fix((jiaodu-degree)*60); >> second = ((jiaodu-degree)*60-mimute)*60; >> dms = degree+mimute/100+second/10000; >> if(rad<0) dms=-dms; else dms=dms; end return >> function [x2,y2] = xy_direct(x1,y1,distance, azimuth) >>x2=x1+distance.*cos(azimuth*pi/180); >>y2=y1+distance.*sin(azimuth*pi/180); >>end 2) 对文件data1.txt中数据进行坐标正算,并将已知点和计算点坐标按照格式存贮在文件data2.txt中, data1.txt格式为:
    x1 y1 距离 方位角(dd.mmss)
    data2.txt格式为:
    x1 y1 x2 y2 >> [filename,pathname]=uigetfile; >> file=[pathname,filename]; >> data=importdata(file); >> %[x1,y1]=data.data(:,[1,2]); >> azimuth=dms2degree(data.data(:,4)); >> distance=data.data(:,3); >> %[x2,y2]=xy_direct(x1,y1,distance,azimuth); >>[x2,y2]=xy_direct(data.data(:,1),data.data(:,2),distance,azimuth); >> [filename_out,pathname_out]=uiputfile; >> fileout=[pathname_out,filename_out]; >> fid=fopen(fileout,'wt'); >> fprintf(fid,'x1 y1 x2 y2\n'); >> fprintf(fid,'%8.2f %8.2f %8.2f %8.2f\n',[data.data(:,1:2),x2,y2]); >> fclose('all') ans = 0 2、编写坐标反算程序 1)建立以xy_inv命名的函数,函数输入输出格式为 [distance, azimuth] = xy_inv(x1,y1, x2,y2) >> function [distance, azimuth] = xy_inv(x1,y1, x2,y2) >> delt_x=x2-x1; >> delt_y=y2-y1; >> [m,x]=size(delt_x); >> azimuth=zeros(0,m); >> for i=1:m azimuth_temp=atan2(abs(delt_y(i)),abs(delt_x(i))); if delt_x(i)>0&&delt_y(i)>0 azimuth(i)=azimuth_temp; elseif delt_x(i)>0&&delt_y(i)<0 azimuth(i)=2*pi-azimuth_temp; elseif delt_x(i)<0&&delt_y(i)>0 azimuth(i)=pi-azimuth_temp; else delt_x(i)<0&&delt_y(i)<0; azimuth(i)=pi+azimuth_temp; end end >> azimuth=rad2dms(azimuth) >> distance=sqrt((x2-x1).^2+(y2-y1).^2); >> %fprintf('两点间距离:%8.3f ;
    方位角为:%8.3f',distance,azimuth); 2) 对文件data2.txt中数据进行坐标反算,并将计算结果按照格式存贮在文件data3.txt中, Data3.txt格式为:
    x1 y1 x2 y2 距离 方位角(dd.mmss)
    >> [filename,pathname] = uigetfile; >>file = [pathname, filename]; >>data=importdata(file); >> [distance, azimuth] = xy_inv(data.data(:,1),data.data(:,2),data.data(:,3),data.data(:,4)); >> [filename_out,pathname_out] = uiputfile; >>fileout = [pathname_out, filename_out]; >>fid = fopen(fileout,'wt'); >>fprintf(fid,' x1 y1 x2 y2 距离 方位角(dd.mmss)\n'); >>fprintf(fid,'%8.2f %8.2f %8.2f %8.2f %8.2f %8.4f\n',[data.data(:,1:4),distance,azimuth']'); >>fclose('all'); 3、可能用到的函数 开根号,sqrt(x) sin(rad)、cos(rad)、atan2(y,x),find

    • 生活居家
    • 情感人生
    • 社会财经
    • 文化
    • 职场
    • 教育
    • 电脑上网