
文章目录
简述
本教程包含:
-
plot3(三维曲线):
- 基础语法和使用场景
- 螺旋线、多条曲线、动态曲线等示例
- 适合绘制轨迹、路径和时间序列数据
-
mesh(网格曲面):
- 网格结构的可视化
- 不同网格密度、颜色配置
- 复杂数学函数和动态动画示例
-
surf(填充曲面):
- 光滑曲面绘制
- 不同着色模式对比
- 参数化曲面(球面、环面、双曲面等)
-
对比分析:帮助你根据具体需求选择合适的绘图方法
-
综合应用:展示如何组合使用多种绘图命令
每个示例都提供了完整的代码,可以直接在MATLAB中运行,文末也有整合各种示例的mlx文件,下载后可直接在MATLAB上运行查看
plot3 - 三维曲线绘制
基本语法
plot3(x, y, z)
plot3(x, y, z, LineSpec)
plot3(x1, y1, z1, LineSpec1, x2, y2, z2, LineSpec2, ...)
使用场景
- 绘制三维空间中的曲线轨迹
- 显示参数方程的三维图形
- 绘制数据点的连线
- 可视化时间序列的三维演化
基础示例
% 螺旋线
t = 0:pi/50:10*pi;
x = sin(t);
y = cos(t);
z = t;
plot3(x, y, z, 'r-', 'LineWidth', 2);
grid on;
xlabel('X'); ylabel('Y'); zlabel('Z');
title('三维螺旋线');
运行结果:

进阶示例
多条曲线绘制
% 绘制多条三维曲线
t = 0:pi/100:4*pi;
% 曲线1:螺旋线
x1 = cos(t);
y1 = sin(t);
z1 = t/(2*pi);
% 曲线2:椭圆螺旋
x2 = 2*cos(t);
y2 = sin(t);
z2 = t/(4*pi);
% 曲线3:波浪螺旋
x3 = cos(t) .* (1 + 0.3*sin(5*t));
y3 = sin(t) .* (1 + 0.3*sin(5*t));
z3 = t/(3*pi);
figure;
hold on;
plot3(x1, y1, z1, 'r-', 'LineWidth', 2, 'DisplayName', '标准螺旋');
plot3(x2, y2, z2, 'g--', 'LineWidth', 2, 'DisplayName', '椭圆螺旋');
plot3(x3, y3, z3, 'b:', 'LineWidth', 2, 'DisplayName', '波浪螺旋');
grid on;
legend('show');
xlabel('X轴'); ylabel('Y轴'); zlabel('Z轴');
title('多条三维曲线对比');
view(45, 30);
运行结果:

动态三维曲线
% 动态绘制三维曲线
figure;
t = 0:0.1:4*pi;
for k = 1:length(t)
% 动态螺旋线
x = cos(t(1:k));
y = sin(t(1:k));
z = t(1:k)/(2*pi);
plot3(x, y, z, 'b-', 'LineWidth', 2);
grid on;
xlabel('X'); ylabel('Y'); zlabel('Z');
title(sprintf('动态螺旋线 (t = %.1f)', t(k)));
axis([-1.5 1.5 -1.5 1.5 0 2]);
view(45, 30);
drawnow;
pause(0.05);
end
运行结果:
动态绘图
参数化三维曲线族
% 不同参数的三维曲线族
figure;
hold on;
colors = ['r', 'g', 'b', 'c', 'm', 'y'];
t = 0:0.1:4*pi;
for a = 1:6
x = cos(a*t);
y = sin(a*t);
z = t;
plot3(x, y, z, colors(a), 'LineWidth', 1.5, ...
'DisplayName', sprintf('频率参数 a = %d', a));
end
grid on;
legend('show');
xlabel('X'); ylabel('Y'); zlabel('Z');
title('不同频率参数的三维曲线族');
view(45, 30);
运行结果:

mesh - 三维网格曲面
基本语法
mesh(X, Y, Z)
mesh(Z)
mesh(..., C)
mesh(..., 'PropertyName', PropertyValue)
使用场景
- 显示函数的三维网格结构
- 分析数据的网格分布
- 查看曲面的网格细节
- 适合观察曲面的拓扑结构
基础示例
% 基本网格曲面
[X, Y] = meshgrid(-3:0.25:3, -3:0.25:3);
Z = peaks(X, Y);
mesh(X, Y, Z);
xlabel('X'); ylabel('Y'); zlabel('Z');
title('Peaks函数的网格曲面');
运行结果:

进阶示例
自定义网格密度和颜色
% 不同网格密度对比
figure;
% 粗网格
subplot(2,2,1);
[X1, Y1] = meshgrid(-2:0.5:2, -2:0.5:2);
Z1 = X1.^2 + Y1.^2;
mesh(X1, Y1, Z1);
title('粗网格 (步长0.5)');
xlabel('X'); ylabel('Y'); zlabel('Z');
% 细网格
subplot(2,2,2);
[X2, Y2] = meshgrid(-2:0.1:2, -2:0.1:2);
Z2 = X2.^2 + Y2.^2;
mesh(X2, Y2, Z2);
title('细网格 (步长0.1)');
xlabel('X'); ylabel('Y'); zlabel('Z');
% 自定义颜色映射
subplot(2,2,3);
mesh(X2, Y2, Z2);
colormap(hot);
colorbar;
title('热色图配色');
xlabel('X'); ylabel('Y'); zlabel('Z');
% 单色网格
subplot(2,2,4);
mesh(X2, Y2, Z2, 'EdgeColor', 'blue', 'FaceColor', 'none');
title('蓝色单色网格');
xlabel('X'); ylabel('Y'); zlabel('Z');
运行结果:

复杂数学函数的网格可视化
% 多个数学函数的网格展示
figure;
% 波浪函数
subplot(2,3,1);
[X, Y] = meshgrid(-2*pi:0.2:2*pi, -2*pi:0.2:2*pi);
Z = sin(sqrt(X.^2 + Y.^2));
mesh(X, Y, Z);
title('波浪函数: sin(√(x²+y²))');
% 鞍面函数
subplot(2,3,2);
Z = X.^2 - Y.^2;
mesh(X, Y, Z);
title('鞍面: x² - y²');
% 高斯函数
subplot(2,3,3);
Z = exp(-(X.^2 + Y.^2)/2);
mesh(X, Y, Z);
title('高斯函数: e^(-(x²+y²)/2)');
% 正弦波乘积
subplot(2,3,4);
Z = sin(X) .* cos(Y);
mesh(X, Y, Z);
title('正弦波乘积: sin(x)cos(y)');
% 椭圆抛物面
subplot(2,3,5);
Z = X.^2/4 + Y.^2;
mesh(X, Y, Z);
title('椭圆抛物面: x²/4 + y²');
% 双曲抛物面
subplot(2,3,6);
Z = X.*Y;
mesh(X, Y, Z);
title('双曲抛物面: xy');
运行结果:

动态网格动画
% 动态波动网格
figure;
[X, Y] = meshgrid(-3:0.2:3, -3:0.2:3);
for t = 0:0.1:4*pi
Z = sin(sqrt(X.^2 + Y.^2) - t);
mesh(X, Y, Z);
axis([-3 3 -3 3 -1.5 1.5]);
xlabel('X'); ylabel('Y'); zlabel('Z');
title(sprintf('动态波动 (t = %.1f)', t));
colormap(jet);
drawnow;
pause(0.05);
end
运行结果:
动态绘图mesh
surf - 三维填充曲面
基本语法
surf(X, Y, Z)
surf(Z)
surf(..., C)
surf(..., 'PropertyName', PropertyValue)
使用场景
- 显示光滑的三维曲面
- 数据的连续性可视化
- 地形图和热力图
- 科学计算结果的直观展示
基础示例
% 基本填充曲面
[X, Y] = meshgrid(-3:0.1:3, -3:0.1:3);
Z = peaks(X, Y);
surf(X, Y, Z);
shading interp; % 平滑着色
colorbar;
xlabel('X'); ylabel('Y'); zlabel('Z');
title('Peaks函数的填充曲面');
运行结果:

进阶示例
不同着色模式对比
% 着色模式对比
figure;
[X, Y] = meshgrid(-2:0.1:2, -2:0.1:2);
Z = sin(pi*X) .* cos(pi*Y);
% faceted着色(默认)
subplot(2,2,1);
surf(X, Y, Z);
shading faceted;
title('Faceted着色');
colorbar;
% flat着色
subplot(2,2,2);
surf(X, Y, Z);
shading flat;
title('Flat着色');
colorbar;
% interp着色
subplot(2,2,3);
surf(X, Y, Z);
shading interp;
title('Interp着色');
colorbar;
% 自定义属性
subplot(2,2,4);
surf(X, Y, Z, 'EdgeColor', 'none', 'FaceAlpha', 0.8);
title('无边缘,半透明');
colorbar;
运行结果:

多层曲面叠加
% 多层透明曲面
figure;
[X, Y] = meshgrid(-2:0.1:2, -2:0.1:2);
% 第一层曲面
Z1 = exp(-(X.^2 + Y.^2));
surf(X, Y, Z1, 'FaceAlpha', 0.5, 'EdgeColor', 'none');
hold on;
% 第二层曲面
Z2 = 0.5 * exp(-((X-1).^2 + (Y-1).^2));
surf(X, Y, Z2, 'FaceAlpha', 0.5, 'EdgeColor', 'none');
% 第三层曲面
Z3 = 0.3 * exp(-((X+1).^2 + (Y+1).^2));
surf(X, Y, Z3, 'FaceAlpha', 0.5, 'EdgeColor', 'none');
xlabel('X'); ylabel('Y'); zlabel('Z');
title('多层透明曲面叠加');
colorbar;
view(45, 30);
运行结果:

参数化曲面
% 各种参数化曲面
figure;
% 球面
subplot(2,3,1);
[u, v] = meshgrid(0:0.1:2*pi, 0:0.1:pi);
x = sin(v) .* cos(u);
y = sin(v) .* sin(u);
z = cos(v);
surf(x, y, z);
shading interp;
title('球面');
axis equal;
% 环面(甜甜圈)
subplot(2,3,2);
R = 3; r = 1;
[u, v] = meshgrid(0:0.2:2*pi, 0:0.2:2*pi);
x = (R + r*cos(v)) .* cos(u);
y = (R + r*cos(v)) .* sin(u);
z = r * sin(v);
surf(x, y, z);
shading interp;
title('环面');
axis equal;
% 双曲面
subplot(2,3,3);
[u, v] = meshgrid(-2:0.1:2, 0:0.2:2*pi);
x = cosh(u) .* cos(v);
y = cosh(u) .* sin(v);
z = sinh(u);
surf(x, y, z);
shading interp;
title('双曲面');
% 椭球面
subplot(2,3,4);
a = 2; b = 1; c = 0.5;
[u, v] = meshgrid(0:0.2:2*pi, 0:0.2:pi);
x = a * sin(v) .* cos(u);
y = b * sin(v) .* sin(u);
z = c * cos(v);
surf(x, y, z);
shading interp;
title('椭球面');
axis equal;
% 抛物面
subplot(2,3,5);
[u, v] = meshgrid(-2:0.1:2, -2:0.1:2);
x = u;
y = v;
z = u.^2 + v.^2;
surf(x, y, z);
shading interp;
title('抛物面');
% 螺旋面
subplot(2,3,6);
[u, v] = meshgrid(0:0.1:4*pi, -1:0.1:1);
x = u .* cos(u);
y = u .* sin(u);
z = v;
surf(x, y, z);
shading interp;
title('螺旋面');
运行结果:

三个命令的对比与选择
功能对比表
| 特性 | plot3 | mesh | surf |
|---|---|---|---|
| 用途 | 三维曲线 | 网格曲面 | 填充曲面 |
| 数据类型 | 向量 | 矩阵 | 矩阵 |
| 视觉效果 | 线条 | 网格框架 | 实心曲面 |
| 适用场景 | 轨迹、路径 | 结构分析 | 连续数据 |
| 计算负荷 | 低 | 中 | 高 |
选择建议
-
plot3:
- 显示数据点的连接关系
- 轨迹和路径可视化
- 时间序列的三维展示
-
mesh:
- 需要看到曲面的网格结构
- 分析函数的局部特征
- 数据点相对较少时
-
surf:
- 需要光滑的视觉效果
- 展示连续的数据分布
- 制作演示用的精美图形
综合应用示例
复杂数据可视化
% 综合三种绘图方法的应用
figure;
% 生成数据
[X, Y] = meshgrid(-3:0.2:3, -3:0.2:3);
Z = peaks(X, Y);
% 绘制填充曲面作为背景
surf(X, Y, Z, 'FaceAlpha', 0.7, 'EdgeColor', 'none');
hold on;
% 添加等高线(投影到底面)
contour3(X, Y, Z, 10, 'k-', 'LineWidth', 1);
% 添加特殊路径(plot3)
t = -3:0.1:3;
x_path = t;
y_path = sin(t);
z_path = interp2(X, Y, Z, x_path, y_path, 'cubic') + 0.5;
plot3(x_path, y_path, z_path, 'r-', 'LineWidth', 3);
% 添加关键点
peak_points_x = [0, 1.3, -1.3];
peak_points_y = [0, 0, 0];
peak_points_z = [8.1, -6.5, -6.5];
plot3(peak_points_x, peak_points_y, peak_points_z, 'ro', ...
'MarkerSize', 10, 'MarkerFaceColor', 'yellow');
xlabel('X轴'); ylabel('Y轴'); zlabel('Z轴');
title('综合三维可视化:surf + contour3 + plot3');
colorbar;
legend('曲面', '等高线', '路径', '关键点', 'Location', 'best');
view(45, 30);
运行结果:

总结
这三个命令各有特色和适用场景:
- plot3适合绘制三维曲线和轨迹
- mesh适合显示网格结构和分析细节
- surf适合展示光滑的连续曲面
mlx文件的下载链接:
通过网盘分享的文件:draw_3dim_1.mlx
链接: https://pan.baidu.com/s/1xOnknUL76gN-O5z5HyWWDQ?pwd=ekf6 提取码: ekf6
如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者
2万+

被折叠的 条评论
为什么被折叠?



