前言
这次复习MATLAB画图进阶部分的3D画图知识,老规矩,事先声明,本人是跟着的B站上的教程视频 MATLAB教程_台大郭彦甫(14课)原视频补档,所以博客中的大部分案例也都来自郭老师得教案。
案例一
x=0:0.1:3*pi; z1=sin(x); z2=sin(2.*x); z3=sin(3.*x);
y1=zeros(size(x)); y3=ones(size(x)); y2=y3./2;
plot3(x,y1,z1,'r',x,y2,z2,'b',x,y3,z3,'g'); grid on;
xlabel('x-axis'); ylabel('y-axis'); zlabel('z-axis');
zeros - 创建全零数组
此 MATLAB 函数 返回标量 0。
plot3 - 三维点或线图
此 MATLAB 函数 绘制三维空间中的坐标。 要绘制由线段连接的一组坐标,请将 X、Y、Z 指定为相同长度的向量。 要在同一组坐标轴上绘制多组坐标,请将 X、Y 或 Z 中的至少一个指定为矩阵,其他指定为向量。
案例二
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
grid on; axis square;
grid - 显示或隐藏坐标区网格线
此 MATLAB 函数 显示 gca 命令返回的当前坐标区或图的主网格线。主网格线从每个刻度线延伸。
案例三
turns = 40*pi;
t = linspace(0,turns,4000);
x = cos(t).*(turns-t)./turns;
y = sin(t).*(turns-t)./turns;
z = t./turns;
plot3(x,y,z); grid on;
linspace - 生成线性间距向量
此 MATLAB 函数 返回包含 x1 和 x2 之间的 100 个等间距点的行向量。
案例四
x = -3.5:0.2:3.5; y = -3.5:0.2:3.5;
[X,Y] = meshgrid(x,y);
Z = X.*exp(-X.^2-Y.^2);
subplot(1,2,1); mesh(X,Y,Z);
subplot(1,2,2); surf(X,Y,Z);
meshgrid - 二维和三维网格
此 MATLAB 函数 基于向量 x 和 y 中包含的坐标返回二维网格坐标。X 是一个矩阵,每一行是 x 的一个副本;Y 也是一个矩阵,每一列是 y 的一个副本。坐标 X 和 Y 表示的网格有 length(y) 个行和 length(x) 个列。
exp - 指数
此 MATLAB 函数 为数组 X 中的每个元素返回指数 ex。对于复数元素 z = x + iy,它返回以下复指数。
mesh - 网格图
此 MATLAB 函数 使用 Z 确定的颜色绘制线框网格,因此其颜色与曲面高度成比例。如果 X 和 Y 为向量,length(X) = n 且 length(Y) = m,其中 [m,n] = size(Z)。在本示例中,(X(j), Y(i), Z(i,j)) 是线框网格线的交点;X 和 Y 分别对应于 Z 的列和行。如果 X 和 Y 为矩阵,则 (X(i,j), Y(i,j), Z(i,j)) 是线框网格线的交点。X、Y 或 Z 中的值可以是数值、日期时间值、持续时间值或分类值。
surf - 曲面图
此 MATLAB 函数 创建一个三维曲面图。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。函数还对颜色数据使用 Z,因此颜色与高度成比例。
案例五
x = -3.5:0.2:3.5;
y = -3.5:0.2:3.5;
[X,Y] = meshgrid(x,y);
Z = X.*exp(-X.^2-Y.^2);
subplot(2,1,1);
mesh(X,Y,Z);
axis square;
subplot(2,1,2);
contour(X,Y,Z);
axis square;
contour - 矩阵的等高线图
此 MATLAB 函数 创建一个包含矩阵 Z 的等值线的等高线图,其中 Z 包含 x-y 平面上的高度值。MATLAB 会自动选择要显示的等高线。Z 的行索引和列索引分别是平面中的 x 和 y 坐标。
案例六
x = -3.5:0.2:3.5; y = -3.5:0.2:3.5;
[X,Y] = meshgrid(x,y); Z = X.*exp(-X.^2-Y.^2);
subplot(1,3,1); contour(Z,[-.45:.05:.45]); axis square;
subplot(1,3,2); [C,h] = contour(Z);
clabel(C,h); axis square;
subplot(1,3,3); contourf(Z); axis square;
clabel - 为等高线图添加高程标签
此 MATLAB 函数 为当前等高线图添加标签,将旋转文本插入每条等高线。等高线必须足够长以容纳标签,否则 clabel 无法插入标签。如果没有等高线矩阵 C,则将 C 替换为 []。
contourf - 填充的二维等高线图
此 MATLAB 函数 创建一个包含矩阵 Z 的等值线的填充等高线图,其中 Z 包含 x-y 平面上的高度值。MATLAB 会自动选择要显示的等高线。Z 的行索引和列索引分别是平面中的 x 和 y 坐标。
案例七
x = -3.5:0.2:3.5; y = -3.5:0.2:3.5;
[X,Y] = meshgrid(x,y); Z = X.*exp(-X.^2-Y.^2);
subplot(1,2,1); meshc(X,Y,Z);
subplot(1,2,2); surfc(X,Y,Z);
meshc - 根据网格图绘制等高线图
此 MATLAB 函数 使用 Z 确定的颜色绘制线框网格并根据该网格绘制等高线图,使颜色与曲面高度成比例。如果 X 和 Y 为向量,length(X) = n 且 length(Y) = m,其中 [m,n] = size(Z)。在本示例中,(X(j), Y(i), Z(i,j)) 是线框网格线的交点;X 和 Y 分别对应于 Z 的列和行。如果 X 和 Y 为矩阵,则 (X(i,j), Y(i,j), Z(i,j)) 是线框网格线的交点。
surfc - 三维着色曲面图下的等高线图
此 MATLAB 函数 通过矩阵 Z 中的 z 分量在三维着色曲面下创建一个等高线图(使用 x = 1:n 和 y = 1:m,其中 [m,n] = size(Z))。高度 Z 是通过几何矩形网格定义的单值函数。Z 指定颜色数据和曲面高度,因此颜色与曲面高度成比例。
案例八
sphere(50); shading flat;
light('Position',[1 3 2]);
light('Position',[-3 -1 3]);
material shiny;
axis vis3d off;
set(gcf,'Color',[1 1 1]);
view(-45,20);
sphere - 生成球面
此 MATLAB 函数 生成一个包含 20×20 个面的球面。
shading - 设置颜色着色属性
此 MATLAB 函数 每个网格线段和面具有恒定颜色,该颜色由该线段的端点或该面的角边处具有最小索引的颜色值确定。
material - 控制曲面和补片的反射属性。
此 MATLAB 函数 使得对象具有相对于漫反射和环境光更高的镜面反射率,镜面反射光的颜色仅取决于光源的颜色。
view - 照相机视线
此 MATLAB 函数 为当前坐标区设置照相机视线的方位角和仰角。
案例十
[X, Y, Z] = sphere(64); h = surf(X, Y, Z);
axis square vis3d off;
reds = zeros(256, 3); reds(:, 1) = (0:256.-1)/255;
colormap(reds); shading interp; lighting phong;
set(h, 'AmbientStrength', 0.75, 'DiffuseStrength', 0.5);
L1 = light('Position', [-1, -1, -1]);
light - 创建光源对象
此 MATLAB 函数 使用给定属性的指定值创建一个 Light 对象。有关上述属性的说明,请参阅 Light 属性。MATLAB 软件将该光源指定为当前坐标区的父级,除非您使用 Parent 属性指定了其他坐标区。
set(L1, 'Position', [-1, -1, 1]);
set(L1, 'Color', 'g');
案例十一
v = [0 0 0; 1 0 0 ; 1 1 0; 0 1 0; 0.25 0.25 1; ...
0.75 0.25 1; 0.75 0.75 1; 0.25 0.75 1];
f = [1 2 3 4; 5 6 7 8; 1 2 6 5; 2 3 7 6; 3 4 8 7; 4 1 5 8];
subplot(1,2,1); patch('Vertices', v, 'Faces', f, ...
'FaceVertexCData', hsv(6), 'FaceColor', 'flat');
view(3); axis square tight; grid on;
subplot(1,2,2); patch('Vertices', v, 'Faces', f, ...
'FaceVertexCData', hsv(8), 'FaceColor', 'interp');
view(3); axis square tight; grid on;
patch - 创建一个或多个填充多边形
此 MATLAB 函数 使用 X 和 Y 的元素作为每个顶点的坐标,以创建一个或多个填充多边形。patch 以您指定顶点的顺序连接这些顶点。要创建一个多边形,请将 X 和 Y 指定为向量。要创建多个多边形,请将 X 和 Y 指定为矩阵,其中每一列对应于一个多边形。C 决定多边形的颜色。
hsv - HSV 颜色图数组
此 MATLAB 函数 以三列数组形式返回 hsv 颜色图,其中包含的行数与当前图窗的颜色图相同。如果不存在图窗,则行数等于默认长度 64。数组中的每一行包含一种特定颜色的红、绿、蓝强度。强度介于 [0,1] 范围内。
案例十二
load cape
X=conv2(ones(9,9)/81,cumsum(cumsum(randn(100,100)),2));
surf(X,'EdgeColor','none','EdgeLighting','Phong','FaceColor','interp');
colormap(map); caxis([-10,300]);
grid off; axis off;
conv2 - 二维卷积
此 MATLAB 函数 返回矩阵 A 和 B 的二维卷积
cumsum - 累积和
此 MATLAB 函数 从 A 中的第一个其大小不等于 1 的数组维度开始返回 A 的累积和。 如果 A 是向量,则 cumsum(A) 返回包含 A 元素累积和的向量。 如果 A 是矩阵,则 cumsum(A) 返回包含 A 每列的累积和的矩阵。 如果 A 为多维数组,则 cumsum(A) 沿第一个非单一维运算。
surf - 曲面图
此 MATLAB 函数 创建一个三维曲面图。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。函数还对颜色数据使用 Z,因此颜色与高度成比例。
caxis - 设置颜色图范围
此 MATLAB 函数 设置当前坐标区的颜色图范围。limits 是 [cmin cmax] 形式的二元素向量。颜色图索引数组中小于或等于 cmin 的所有值映射到颜色图的第一行。大于或等于 cmax 的所有值映射到颜色图的最后一行。介于 cmin 和 cmax 之间的所有值以线性方式映射到颜色图的中间各行。 caxis 函数只影响 CDataMapping 属性设置为 ‘scaled’ 的图形对象,不影响使用真彩色或 CDataMapping 设置为 ‘direct’ 的图形对象。
grid - 显示或隐藏坐标区网格线
此 MATLAB 函数 显示 gca 命令返回的当前坐标区或图的主网格线。主网格线从每个刻度线延伸。
axis - 设置坐标轴范围和纵横比
此 MATLAB 函数 指定当前坐标区的范围。以包含 4 个、6 个或 8 个元素的向量形式指定范围。