分享

三维绘图(1)| 动画图、网格表面图、三维等高线图

 小温爱怡宝 2023-07-22 发布于江西

9.2 三维绘图

  • 9.2.1 plot3 函数

  • 9.2.2 comet3三维动画图

  • 9.2.3 网格表面

    • surf 函数绘制网格表面

  • 9.2.4 等高线图

    • 三维等高线图

    • 带有标号的三维等高线图

MATLAB具有多种用于显示和可视化3-D数据的功能,可以是3-D中的直线,也可以是各种类型的曲面。本节提供一个简要的概述。

9.2.1 plot3 函数

在 MATLAB 中,plot3 函数是一种用于绘制三维图形的函数,可以用于绘制三维曲线、散点图和线框图等。plot3 函数的基本用法如下:

plot3(x, y, z)

其中,x、y 和 z 是三维数据点的坐标,可以是向量或矩阵。例如,要绘制三维曲线 (x,y,z) = (sin(t),cos(t),t) ,其中 t 在 0 到 10*pi 之间变化,可以使用以下代码:

t = linspace(010*pi1000);
x = sin(t);
y = cos(t);
z = t;
plot3(x, y, z);

此外,plot3 函数还支持设置线型、颜色和标记等参数,可以使用如下代码进行设置:

plot3(x, y, z, 'LineStyle''--''Color''r''Marker''o')

该代码将绘制一个以红色虚线为线型,带有圆形标记的三维曲线。

9.2.2 comet3三维动画图

在 MATLAB 中,可以使用 comet3 函数绘制三维动画图。comet3 函数是一种用于绘制带有轨迹动画的函数,可以用于绘制三维曲线的轨迹动画。

comet3 函数的基本用法如下:

comet3(x, y, z)

其中,x、y 和 z 是三维数据点的坐标,可以是向量或矩阵, 要具有相同的长度, 且每个元素对应一个点的坐标。例如,要绘制三维曲线 (x,y,z) = (sin(t),cos(t),t),其中 t 在 0 到 10*pi 之间变化,可以使用以下代码:

t = linspace(010*pi1000);
x = sin(t);
y = cos(t);
z = t;
comet3(x, y, z);

运行代码后,会在 3D 坐标系中绘制出一个带有轨迹动画的三维曲线。在绘制动画时,可以使用 pause 函数控制每一帧的时间。例如,以下代码将每一帧的时间设置为 0.05 秒:

t = linspace(010*pi1000);
x = sin(t);
y = cos(t);
z = t;
comet3(x, y, z);
pause(0.05);

9.2.3 网格表面

在第一章中,我们看到了如何画墨西哥帽子

[x y ] = meshgrid(-8 : 0.5 : 8);
r = sqrt(x.^2 + y.^2) + eps;
z = sin(r) ./ r;

这张图是一个网格表面的例子.

了了解如何绘制这样的曲面,我们举一个简单的例子,比如。 我们要找的曲面是当我们在x-y平面上移动时,由z值生成的曲面。我们限制在这个平面第一象限的一部分为 .

第一步是在x-y平面上设置网格,在该平面上绘制表面。可以使用MATLAB函数meshgrid来实现,如下所示:

[x y] = meshgrid(0:5);

这条语句设置了两个矩阵,x和y。(函数,如meshgrid,返回多个“输出参数”,将在第10章详细讨论。然而,你不需要知道细节就可以在这里使用它。)

这个例子中的两个矩阵是:

x=[0 1 2 3 4 5;
0 1 2 3 4 5;
0 1 2 3 4 5;
0 1 2 3 4 5;
0 1 2 3 4 5;
0 1 2 3 4 5]

y =[0 0 0 0 0 0;
1 1 1 1 1 1;
2 2 2 2 2 2;
3 3 3 3 3 3;
4 4 4 4 4 4;
5 5 5 5 5 5]

这样做的效果是,显示的矩阵x的列保存网格中点的x坐标,而显示y的行保存y坐标。回顾MATLAB数组操作的定义方式为逐个元素,这意味着语句z = x.^2 - y.^2将正确生成表面点:

z =
0 1 4 9 16 25
-1 0 3 8 15 24
-4 -3 0 5 12 21
-9 -8 -5 0 7 16
-16 -15 -12 -7 0 9
-25 -24 -21 -16 -9 0

例如,在网格点 处,z的值为。顺便说一句,你不需要担心网格坐标和矩阵下标之间的确切关系;这是由meshgrid处理的。

语句mesh(z)然后绘制表面,网格线连接位于网格点上方的表面中的点。

注意,mesh(z)显示了矩阵z在x和y轴上的行和列索引(下标)。如果你想在x轴和y轴上看到合适的值,使用mesh(x,y,z)。这适用于许多其他3-D绘图函数。

mesh 函数绘制一个表面作为一个“线框架”。surf提供了另一种可视化方法,它生成了表面的多面体视图(彩色),即电线框架被小瓷砖覆盖。


用更细的网格(每个方向0.25个单位)绘制图表面,使用[x y] = meshgrid(0:0.25 : 5);(每个方向的网格点数为21)。

要使用更细的网格进行绘制,可以使用 meshgrid 函数生成更多的坐标点。你可以根据需要设置网格点数,并使用这些坐标点来计算 z 值,然后使用 mesh 函数绘制图表面。

以下是使用更细的网格(每个方向0.25个单位,共21个网格点)来绘制图表面的示例代码:

% 创建一个新的图形窗口
figure;

% 生成更细的网格坐标点
[x, y] = meshgrid(0:0.25:5);

% 计算 z 值
z = x.^2 - y.^2;

% 绘制图表面
mesh(x, y, z);

上述代码将会在一个新的图形窗口中绘制图表面,其中 x 和 y 轴对应于生成的网格坐标点,而 z 轴对应于计算得到的 z 值。根据生成的网格点的数量增加,图表面将会变得更加详细。


钢板上的初始热分布由函数给出, 在所定义的网格上绘制曲面, 其中两个方向的网格宽度都是0.15。

要在MATLAB中绘制上述函数的曲面图,可以按照以下步骤进行操作:

% 创建一个新的图形窗口
figure;

% 定义 x 和 y 的范围以及网格宽度
x = -2.1:0.15:2.1;
y = -6:0.15:6;

% 生成 x 和 y 的网格矩阵
[X, Y] = meshgrid(x, y);

% 计算对应的 z 值
Z = 80 * Y.^2 .* exp(-X.^2 - 0.3 * Y.^2);

% 绘制曲面图
surf(X, Y, Z);

% 添加颜色条
colorbar;

% 添加标题和轴标签
title('曲面图');
xlabel('x');
ylabel('y');
zlabel('u');

在这个示例中,我们首先定义了 x 和 y 的范围以及网格宽度。然后,使用 meshgrid 函数生成对应的网格矩阵 X 和 Y。接下来,根据函数 的表达式计算出对应的 z 值矩阵 Z。

最后,使用 surf 函数将 x、y 和 z 绘制为曲面图。使用 colorbar 函数添加一个颜色条,以显示不同数值范围对应的颜色。同时,使用 titlexlabelylabel 函数添加标题和轴标签,以增加图表的可读性。

surf 函数绘制网格表面

使用 surf 函数绘制网格表面。surf 函数是一种用于绘制三维网格数据的函数,可以用于绘制三维图形中的表面和等高线图等。 surf 函数的基本用法如下:

surf(X, Y, Z)

其中,X、Y 和 Z 是网格数据的坐标矩阵,通常使用 meshgrid 函数生成。例如,要绘制三维函数 z = sin(sqrt(x^2+y^2))/sqrt(x^2+y^2),其中 x、y 在 -8 到 8 之间变化,可以使用以下代码:

[x,y] = meshgrid(-8:0.5:8);
z = sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2);
surf(x, y, z);

运行代码后,会在 3D 坐标系中绘制出一个网格表面,其中不同高度的区域使用不同颜色表示。

补充说明:在 surf 函数中,还可以设置颜色映射、透明度和光照等参数,以增强图形的可视化效果。例如,以下代码将设置颜色映射为 hot、透明度为 0.5、光照为 phong:

[x,y] = meshgrid(-8:0.5:8);
z = sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2);
surf(x, y, z);
colormap hot;
alpha(0.5);
shading interp;
light('Position', [0 0 1], 'Style''local''Color''w');

该代码将绘制一个具有热图颜色映射、半透明度、平滑阴影和白色光照的三维网格表面。

9.2.4 等高线图

MATLAB中的等高线图是一种用于可视化二维数据的常用方法。它通过连接具有相同数值的点来显示数据的轮廓。

在MATLAB中,可以使用contour函数来创建等高线图。该函数接受三个输入参数:x坐标、y坐标和z值矩阵。其中,x和y坐标定义了数据点的位置,而z值矩阵包含了每个数据点的数值。

下面是一个简单的示例,展示了如何创建一个等高线图:

% 创建一个新的图形窗口
figure;

% 生成数据点的坐标
x = linspace(-22100);
y = linspace(-22100);
[X, Y] = meshgrid(x, y);

% 计算z值
Z = X.^2 + Y.^2;

% 绘制等高线图
contour(X, Y, Z);

% 添加颜色条
colorbar;

% 添加标题和轴标签
title('等高线图');
xlabel('X轴');
ylabel('Y轴');

上述代码首先生成了x和y坐标,然后使用meshgrid函数将它们组成网格矩阵X和Y。接下来,通过对X和Y进行运算计算得到对应的z值矩阵 Z。

然后,使用contour函数来根据x、y和z值绘制等高线图。你可以通过调整参数来控制等高线的细节,例如线条样式、线宽等。

最后,使用colorbar函数添加一个颜色条,以便显示不同等高线对应的数值范围。同时,可以使用titlexlabelylabel函数为图添加标题和轴标签,以增加图表的可读性。

通过调整数据点的分布、计算z值的方法以及等高线的参数,你可以更改等高线图的外观和解释性。


三维等高线图

当使用 contour3 函数时,你可以得到一个三维等高线图。contour3 函数与 surf 函数类似,但在可视化上有所不同。要使用 contour3 绘制 steel plate 初始热分布的三维等高线图,可以按照以下步骤进行操作:

[x y] = meshgrid(-2.1:0.15:2.1-6:0.15:6); % x- y-grids different
u = 80 * y.^2 .* exp(-x.^2 - 0.3*y.^2);

% 绘制三维等高线图
contour3(X, Y, Z);

% 添加颜色条
colorbar;

% 添加标题和轴标签
title('三维等高线图');
xlabel('x');
ylabel('y');
zlabel('u');

在这个示例中,我们使用 contour3 函数将 x、y 和 z 绘制为三维等高线图。contour3 函数会根据 z 值生成等高线,并在 z 轴方向将等高线连成曲面。

使用 colorbar 函数添加一个颜色条,以显示不同数值范围对应的颜色。同时,使用 titlexlabelylabel 函数添加标题和轴标签,以增加图表的可读性。


带有标号的三维等高线图

可以使用 contour3 函数来绘制带有标号的三维等高线图。这样可以更清晰地显示每个等高线的数值。下面是一个示例:

% 创建一个新的图形窗口
figure;

% 绘制三维等高线图,并添加标号
[C, h] = contour3(X, Y, Z);
clabel(C, h);

% 添加颜色条
colorbar;

% 添加标题和轴标签
title('带标号的三维等高线图');
xlabel('x');
ylabel('y');
zlabel('u');

在这个示例中,我们首先绘制了三维等高线图,并将返回的等高线矩阵 C 和图像句柄 h 保存下来。然后,使用 clabel 函数来添加标号到等高线上。

clabel 函数会将标号添加到等高线上,并自动选择合适的位置以避免标号重叠。你也可以通过传递额外的参数给 clabel 函数来调整标号的显示方式,如字体大小、颜色等。

最后,我们使用 colorbartitlexlabelylabel 函数来添加颜色条和标题、轴标签,以增强图表的可读性。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多