MATLAB实战 | 不同形式的三维曲面图

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储OSS,敏感数据保护2.0 200GB 1年
文件存储 NAS,50GB 3个月
简介: 通常,MATLAB中绘制三维曲面图,先要生成网格数据,再调用mesh函数和surf函数绘制三维曲面。若曲面用含两个自变量的参数方程定义,则还可以调用fmesh函数和fsurf函数绘图。若曲面用隐函数定义,则可以调用fimplicit3函数绘图。

image.png

01、三维曲面

1. 产生网格坐标矩阵

在MATLAB中产生二维网格坐标矩阵的方法是: 将x方向区间[a,b]分成m份,将y方向区间[c,d ]分成n份,由各划分点分别作平行于两坐标轴的直线,将区域[a,b]×[c,d]分成m×n个小网格,生成代表每一个小网格顶点坐标的网格坐标矩阵。例如,在xy平面选定一矩形区域,如图1所示,其左下角顶点的坐标为(2,3),右上角顶点的坐标为(6,8)。然后在x方向分成4份,在y方向分成5份,由各划分点分别作平行于两坐标轴的直线,将区域分成5×4个小矩形,总共有6×5个顶点。用矩阵X、Y分别存储每一个网格顶点的x坐标与y坐标,矩阵X、Y就是该矩形区域的xy平面网格坐标矩阵。

image.png


■ 图1 网格坐标示例

在MATLAB中,产生平面区域内的网格坐标矩阵有两种方法。

(1) 利用矩阵运算生成。例如,生成图1中的网格坐标矩阵,使用以下命令:

image.png


(2) 调用meshgrid函数生成二维网格坐标矩阵,函数的调用格式如下:

image.png


其中,输入参数x、y为向量,输出参数X、Y为矩阵。命令执行后,矩阵X的每一行都是向量x,行数等于向量y的元素的个数; 矩阵Y的每一列都是向量y,列数等于向量x的元素的个数。矩阵X和Y相同位置上的元素(Xij,Yij)存储二维空间网格顶点(i,j)的坐标。例如,生成图1中的网格坐标矩阵,也可以使用以下命令:

image.png


函数参数可以只有一个,此时生成的网格坐标矩阵是方阵,例如:

image.png


meshgrid函数也可以用于生成三维网格数据,调用格式如下:

image.png


其中,输入参数x、y、z为向量,输出参数X、Y、Z为三维数组。命令执行后,数组X、Y和Z的第一维大小和向量x元素的个数相同,第二维大小和向量y元素的个数相同,第三维大小和向量z元素的个数相同。X、Y和Z相同位置上的元素(Xijk,Yijk,Zijk)存储三维空间网格顶点(i,j,k)的坐标。

ndgrid函数用于生成n维网格数据,调用格式如下:

image.png


其中,输入参数x1、x2、…、xn为向量,输出参数X1、X2、…、Xn为n维矩阵。例如:

image.png


对比前面meshgrid网格数据会发现,meshgrid网格数据进行转置即得到ndgrid网格数据。
##2. mesh函数和surf函数

MATLAB提供了mesh函数和surf函数来绘制三维曲面图。mesh函数用于绘制三维网格图,网格线条有颜色,网格线条之间无颜色; surf函数用于绘制三维曲面图,网格线条之间的补面用颜色填充。surf函数和mesh函数的调用格式为:

image.png


通常,输入参数x、y、z是同型矩阵,x、y定义网格顶点的xy平面坐标,z定义网格顶点的高度。选项c用于指定在不同高度下的补面颜色。c缺省时,MATLAB认为c=z,即颜色的设定值默认正比于图形的高度,这样就可以绘制出层次分明的三维图形。当x,y是向量时,要求x的长度等于矩阵z的列数,y的长度等于矩阵z的行数,x、y向量元素的组合构成网格顶点的x、y坐标。
【例1】已知!
image.png
其中,x、y的40个值均匀分布在[-2,2]范围内,绘制三维曲面图。

程序如下

image.png

程序运行结果如图2所示。mesh、surf函数的前两个参数x、y也可以是行向量或列向量,所以程序中的mesh函数也可以写成mesh(x,x,zz)。

image.png


■ 图2 三维曲面图

若调用surf、mesh函数时,省略前两个输入参数x、y,则把z矩阵的第二维下标当作x坐标,把z矩阵的第一维下标当作y坐标,然后绘制三维曲面图。例如:

image.png


第二条命令生成的z是一个3×5的矩阵,执行mesh(z)命令绘制图形,曲面各个顶点的x坐标是z元素的列下标,y坐标是z元素的行下标。

此外,还有两个和mesh函数功能相似的函数,即meshc函数和meshz函数,其用法与mesh函数类似,不同的是meshc函数还在xy平面上绘制曲面在z轴方向的等高线,meshz函数还在xy平面上绘制曲面的底座。surf函数也有两个类似的函数,即具有等高线的曲面函数surfc和具有光照效果的曲面函数surfl。
【例2】在xy平面内选择区域[-8,8]×[-8,8],利用下列函数绘制4种形式的三维曲面图。

image.png


程序如下:

image.png


程序运行结果如图3所示。

image.png


■ 图3 4种形式的三维曲面图

目录
相关文章
|
10天前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
|
12天前
|
机器学习/深度学习 并行计算 算法
PINN驱动的三维声波波动方程求解(Matlab代码实现)
PINN驱动的三维声波波动方程求解(Matlab代码实现)
164 7
|
12天前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
|
26天前
|
传感器 算法 安全
【无人机三维路径规划】基于灰雁GGO实现无人机三维路径规划(目标函数:最优成本 路径 高度 威胁 转角)研究(Matlab代码代码实现)
【无人机三维路径规划】基于灰雁GGO实现无人机三维路径规划(目标函数:最优成本 路径 高度 威胁 转角)研究(Matlab代码代码实现)
【无人机三维路径规划】基于灰雁GGO实现无人机三维路径规划(目标函数:最优成本 路径 高度 威胁 转角)研究(Matlab代码代码实现)
|
8天前
|
算法 安全 定位技术
基于改进拥挤距离的多模态多目标优化差分进化(MMODE-ICD)求解无人机三维路径规划研究(Matlab代码实现)
基于改进拥挤距离的多模态多目标优化差分进化(MMODE-ICD)求解无人机三维路径规划研究(Matlab代码实现)
|
12天前
|
机器学习/深度学习 并行计算 算法
【无人机避障三维航迹规划】基于人工原生动物优化器APO的复杂城市地形下无人机避障三维航迹规划研究(可以修改障碍物及起始点)(Matlab代码实现)
【无人机避障三维航迹规划】基于人工原生动物优化器APO的复杂城市地形下无人机避障三维航迹规划研究(可以修改障碍物及起始点)(Matlab代码实现)
|
24天前
|
算法 异构计算 Python
【图像重建】使用FDK的三维谢普洛根幻影重建(Matlab代码实现)
【图像重建】使用FDK的三维谢普洛根幻影重建(Matlab代码实现)
|
13天前
|
机器学习/深度学习 传感器 算法
【无人机三维路径规划】PSO无人机路径规划3D城市(Matlab实现)
【无人机三维路径规划】PSO无人机路径规划3D城市(Matlab实现)
|
20天前
|
算法 调度 决策智能
基于高尔夫优化算法GOA求解无人机三维路径规划研究(Matlab代码实现)
基于高尔夫优化算法GOA求解无人机三维路径规划研究(Matlab代码实现)
|
24天前
|
机器学习/深度学习 存储 算法
基于密集型复杂城市场景下求解无人机三维路径规划的Q-learning 算法研究(Matlab代码实现)
基于密集型复杂城市场景下求解无人机三维路径规划的Q-learning 算法研究(Matlab代码实现)

热门文章

最新文章