第四节-matlab 绘图和数据可视化

04-三维曲【面】


% 第四节-matlab 绘图和数据可视化
% 04-三维曲【面】


% 平面网格数据的生成
% 绘制三维曲面的mesh函数和surf函数
% fmesh函数和fsurf函数

% (1)平面网格数据的生成
x=2:6
y=(3:8)'
X=ones(size(y))*x
Y=y*ones(size(x))


% 利用meshgrid函数生成
% [X, Y]=meshgrid(x, y);
% 其中,参数x、y为向量,存储网格点坐标的X、Y为矩阵。
[X,Y]=meshgrid(x,y)
Z=randn(size(X))
plot3(X,Y,Z)
grid on


% mesh 函数 三维网格图
% surf 函数 三维曲面图
% 其中,X、y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不
% 同高度下的曲面颜色。默认c==z
% 绘制三维曲面图z=x*(e-x2(-y2))
t1=-2:0.2:2
[X,Y]=meshgrid(t1)
Z=X.*exp(-X.^2-Y.^2)
subplot(1,3,1)
mesh(X,Y,Z)
subplot(1,3,2)
surf(X,Y,Z)
subplot(1,3,3)
plot3(X,Y,Z)
grid on


% mesh函数和surf函数的其他调用格式:
% mesh(z, c)
% surf(z, c)
% 当x、y省略时,z矩阵的第2维下标当作x轴坐标,
% z矩阵的第1维下标当作y轴坐标。
t2=1:5
z=[0.5*t2;2*t2;3*t2]
mesh(z)

% 带等高显的三维网格曲面函数 meshc
% 带底座的三维网格曲面函数 meshz
% 具有等高线的曲面函数 surfc
% 具有光照效果的曲面函数 surfl

% 例3用4种方式绘制函数z=(x-1)-+(y-2)-1的曲面图,四种方式绘制曲面
% 其中x∈[0,2],y∈[1,3]。
figure(2)
[x1,y1]=meshgrid(0:0.1 :2, 1 :0.1 :3)   % 设置x,y区间之间矩阵
z1=(x1-1).^2+(y1-2).^2-1                % 求解z
subplot(2,2,1)                          % 绘制图形在2.2.1
meshc(x1, y1, z1)                       % 绘制带等高显示的三维网格曲面函数 meshc 
title('meshc(x, y, z')

subplot(2, 2, 2)
meshz(x1, y1, z1)                       % 带底座的三维网格曲面函数 meshz
title('meshz(x, y, z)')

subplot(2, 2, 3)
surfc(x1, y1, z1)                       % 具有等高线的曲面函数 surfc
title('surfc(x. y, z')

subplot(2, 2, 4)
surfl(x1, y1, z1)                       % 具有光照效果的曲面函数 surfl
title('surfl(x, y, z)')



% 绘制标准曲面
% (1) sphere函数
%     [X, y, z]=sphere(n)       %绘制三维球面 n 表示间隔点数
% (2) cylinder函数
%     [X, y, z]=cylinder(R, n)  %绘制三维柱面 n 表示间隔点
%  注: R 是一个向量,存放各个曲面的半径


figure(3)       %
subplot(1,3,1) % 
[x,y,z]=cylinder()
surf(x,y,z)

% ( 3 ) peaks函数
% peaks函数的调用格式: 
% peaks(n)
% peaks(V)
% peaks(X, y)
% peaks

p1=peaks(10)
p2=peaks
p3=peaks(-3:0.2:3)
[x,y]=meshgrid(-2:0.1:2,0,0.1:5)
p4=peaks(x,y)


%fsurf(funx, funy, funz, vlims)
%fmesh(funx, funy, funz, uvlims)
% 其中,funx、 funy、 funz代表定义曲面x、y、z坐标的函数,通常采用函数句柄的形式。
% uvlims为funx、funy和funz的自变量的取值范围,用4元向量[umin, umax, vmin, vmax]描述
% ,默认为[-5,5,-5, 5]。


% 绘制螺旋曲面
figure(4)
funx = @(u, v) u.*sin(v);
funy= @(u, v) -u.*cos(v);
funz= @(u, v) v;
fsurf(funx, funy, funz, [5,5, -5, -2])
hold on 
fmesh(funx, funy, funz, [-5,5, -2, 2])
hold off



更多文章请关注《万象专栏》