matlab绘制三维图形(mesh,surf,contour,fimplicit3) 您所在的位置:网站首页 matlab函数contour matlab绘制三维图形(mesh,surf,contour,fimplicit3)

matlab绘制三维图形(mesh,surf,contour,fimplicit3)

2024-01-13 18:06| 来源: 网络整理| 查看: 265

目录 mesh函数surf函数contour函数fimplicit3函数

参考学习b站:数学建模学习交流

mesh函数

绘制出在某一区间内完整的网格图

mesh(X,Y,Z)的用法,其中X是n维向量,Y是m维向量,Z是m*n维的矩阵:

X = [1,2,4] Y = [3,5] Z = [4,8,10;5,9,13] mesh(X,Y,Z) % (X(j), Y(i), Z(i,j))是线框网格线的交点的坐标 xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签

在这里插入图片描述 mesh(Z)的用法,其中Z是m*n维的矩阵:

Z = [4,8,10;5,9,13] mesh(Z) xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签 % 等价于 X = 1:3 Y = 1:2 Z = [4,8,10;5,9,13] mesh(X,Y,Z) xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签

在这里插入图片描述 mesh(X,Y,Z)中,X中元素不是按照从小到大排序的时候:

X = [1,10,4] Y = [3,5] Z = [4,8,10;5,9,13] mesh(X,Y,Z) hidden off % 可以看到背部的图像,不会遮挡(默认是看不到的) xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签

在这里插入图片描述 mesh(X,Y,Z)的用法,其中X、Y和Z都是m*n维的矩阵

X = [1,2,4;1,2,4] Y = [3,3,3;5,5,5] Z = [4,8,10;5,9,13] mesh(X,Y,Z) % (X(i,j), Y(i,j), Z(i,j))是线框网格线的交点的坐标 xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签

在这里插入图片描述

例一:

绘制 z = x 2 − y 2 z = x^2 - y^2 z=x2−y2的图像 ,其中x和y都位于[0,5]之间

(注意使用点运算符号)

n = 11; tem = linspace(0,5,n); % 将[0,5]这个区间等分为n个点(等差数列的形式) % B = repmat(A,m,n),将矩阵 A 复制 m×n 块 % 即把 A 作为 B 的元素,B 由 m×n 个 A 平铺而成 x = repmat(tem,n,1); y = repmat(tem',1,n); z = x.^2 - y.^2; % 要使用点运算符号 mesh(x,y,z) xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签 axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示

在这里插入图片描述 例二: 绘制 z = sin ⁡ ( x 2 + y 2 ) x 2 + y 2 z=\dfrac{\sin \left( \sqrt{x^{2}+y^{2}}\right) }{\sqrt{x^{2}+y^{2}}} z=x2+y2 ​sin(x2+y2 ​)​ 的图形,其中x和y都位于[-5,5]之间

[x,y] = meshgrid(-5:0.5:5); % 快速生成网格所需的数据 tem = sqrt(x.^2+y.^2)+1e-12; % 防止除0而缺失点,因此加上一个极小值 z = sin(tem)./tem; % 如果不对tem处理,那么z的最中间的一个值 0/0 = NaN mesh(x,y,z) xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签 axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示

在这里插入图片描述 meshc函数:除了mesh函数图形外,还在xy平面上绘制曲面的等高线

meshc(x,y,z) xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签 axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示

在这里插入图片描述

surf函数

绘制出在某一区间内完整的曲面图,surf函数和mesh函数的的调用格式基本相同,两者的区别为mesh绘出彩色的线,surf绘出彩色的面

例一的对比:

[x,y] = meshgrid(linspace(0,5,11)); % [x,y] = meshgrid([0:0.5:5]); 或者直接写成[x,y] = meshgrid(0:0.5:5); z = x.^2 - y.^2; subplot(1,2,1) % subplot(m,n,index) mesh(x,y,z) xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签 axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示 title('mesh(x,y,z)') subplot(1,2,2) surf(x,y,z) xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签 axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示 % axis([0,5,0,5,-inf,+inf]) % 设置坐标轴刻度范围 title('surf(x,y,z)')

在这里插入图片描述

例二的对比:

[x,y] = meshgrid(-5:0.5:5); % 快速生成网格所需的数据 tem = sqrt(x.^2+y.^2)+1e-12; z = sin(tem)./tem; % 如果不对tem处理,那么z的最中间的一个值 0/0 = NaN subplot(1,2,1) mesh(x,y,z) xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签 axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示 title('mesh(x,y,z)') subplot(1,2,2) surf(x,y,z) % (X(j), Y(i), Z(i,j))是线框网格线的交点 xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签 axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示 title('surf(x,y,z)')

在这里插入图片描述 surfl函数:加上了灯光效果,看起来自然点

surfl(x,y,z) xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签 axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示

在这里插入图片描述

contour函数

绘制等高线图

contour(x,y,z) 在x-y平面绘制等高线图,Matlab会自动选择等高线的层级

[x,y] = meshgrid(-3:0.1:3); % 一个语句太长时,可以加上三个点然后在下一行继续写 z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2)... -10* (x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ... - 1/3*exp(-(x+1).^2 - y.^2); % matlab中内置的peaks函数,常常作为演示使用 % edit peaks contour(x,y,z) xlabel('x轴'); ylabel('y轴'); % 加上坐标轴的标签

在这里插入图片描述 显示每一层的高度等

maxz = max(max(z)) minz = min(min(z)) levels = linspace(minz,maxz,10) % 从最小值到最大值,等分成10个点 contour(x,y,z,levels,'ShowText','on','LineWidth',1) % 最小值或者最大值可能显示不出来,因为Matlab会帮我们自动调整 xlabel('x轴'); ylabel('y轴'); % 加上坐标轴的标签

在这里插入图片描述 contourf函数:和contour函数类似,只不过画出来的等高线图有颜色填充

contourf(x,y,z,levels,'ShowText','on') xlabel('x轴'); ylabel('y轴'); % 加上坐标轴的标签

在这里插入图片描述

fimplicit3函数

用来绘制隐函数

fimplicit3(f,interval) 为 x、y 和 z 指定绘图区间

% 函数句柄,注意要用点运算符 f = @(x,y,z) (x.^2+(9/4)*y.^2+z.^2-1).^3-x.^2.*z.^3-(9/80)*y.^2.*z.^3; fimplicit3(f,[-1.5,1.5,-1.5,1.5,-1.5,1.5],'EdgeColor', 'none', 'FaceAlpha',0.5); xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有