matlab中的三维数据_教程 | 数学建模中三维数据的可视化

4552ce7ffd5d0d02e1df3568a036d49d.gif

在数学建模过程中我们经常遇到可视化三维数据的情况。 以2017年研究生数学建模比赛A题(无人机在抢险救灾中的优化运用)为例,这个问题的背景是: 2017年8月8日,四川阿坝州九寨沟县发生7.0级地震,造成了不可挽回的人员伤亡和重大的财产损失。 由于预测地震比较困难,及时高效的灾后救援是减少地震损失的重要措施。 无人机作为一种新型运载工具,能够在救援行动中发挥重要作用。 为提高其使用效率,请你们解决无人机优化运用的几个问题。 附件1给出了震区的高程数据,共有2913列,2775行。第一行第一列表示(0,0)点处的海拔高度值(单位:米),相邻单元格之间的距离为38.2米,即第m行第n列单元格中的数据代表坐标(38.2(m-1), 38.2(n-1))处的高度值。

除另有说明外,本题中的无人机都假设平均飞行速度60千米/小时,最大续航时间为8小时,飞行时的转弯半径不小于100米,最大爬升(俯冲)角度为±15°,与其它障碍物(含地面)的安全飞行距离不小于50米,最大飞行高度为海拔5000米。所有无人机均按规划好的航路自主飞行,无须人工控制,完成任务后自动返回原基地。

该题目中附件1中给出了震区的高程数据,这个数据包含三个维度:经度、纬度以及高度。matlab中最常用的展示三维数据的方式是画三维曲面,这一功能通过surf函数达到,效果如图1. 90061f94ac35c4eb786deed6112238f3.png 图1:三维图

另外还可以通过等高线图描述三维数据,实际上是用颜色来表达高度这一维数据,使用matlab的contour函数可达到目的,效果如图2所示——

98183af9bbcdec11ca493a79932d0950.png

图2:等高图

以下是实现三维地形图和等高图用到的代码——

function mainfun()S1_rawdata=importdata('附件1 区域高程数据.xlsx');S1_rawdata=S1_rawdata'/1000;position_Keyareas =[30.3  89.866.0  84.798.4  76.773.7  61.057.9  47.686.8  22.093.6  48.8];x=0:0.0382*10:2774*0.0382;y=0:0.0382*10:2912*0.0382;%三维地形图[x,y]=meshgrid(x,y);figuresurf(x,y,S1_rawdata(1:10:end,1:10:end))xdata0=0:0.0382:2774*0.0382;ydata0=0:0.0382:2912*0.0382;figurecontour(xdata0,ydata0,S1_rawdata,[2.2,2.4,2.6,2.8,3,3.200,3.400,3.600,3.800,4.000,4.1500])hold onplot(110,0,'r>','MarkerFaceColor','r')text(100,5,'基地H','Color','r')centername={'A','B','C','D','E','F','G'};t=0:0.1:2*pi;xx=sin(t);yy=cos(t);for i=1:7    plot(position_Keyareas(i,1),position_Keyareas(i,2),'ro','MarkerFaceColor','r')    text(position_Keyareas(i,1)-3,position_Keyareas(i,2)+3,centername{i},'Color','r')    plot(10*xx+position_Keyareas(i,1),10*yy+position_Keyareas(i,2),'r--')end%C平均海拔mean(mean(S1_rawdata(2317:2837,1749:2269)))contour(xdata0,ydata0,S1_rawdata,[3,4.150])hold onplot(110,0,'r>','MarkerFaceColor','r')text(100,5,'基地H','Color','r')centername={'A','B','C','D','E','F','G'};t=0:0.1:2*pi;xx=sin(t);yy=cos(t);for i=1:7    plot(position_Keyareas(i,1),position_Keyareas(i,2),'ro','MarkerFaceColor','r')    text(position_Keyareas(i,1)-3,position_Keyareas(i,2)+3,centername{i},'Color','r')    plot(10*xx+position_Keyareas(i,1),10*yy+position_Keyareas(i,2),'r--')endfor i=1:44    for j=1:44        line([2.5*i,2.5*i],[0,110])        line([0,110],[2.5*i,2.5*i])    endend
点击文章结尾“阅读原文”,输入提取码“5qzd”即可获取数据、赛题和代码。 另外,有关于数据导入导出的知识总结请点击:教程 | 第一章——数据的导入和导出

e6e6d9bd842b741f9071556d8cba6bf6.png

撰文:HCLO4

编辑:花毛

校对:VickieQ

7279d8c0b45d76732f89a66aa8fa2e02.png 觉得有用,不如“在看”。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值