Matlab 绘制三维坐标系和旋转曲面教程:常见错误及解决方案

本教程将带您一步步学习使用 Matlab 绘制三维坐标系、直线和旋转曲面,并解决常见的 'surf 函数错误'。

1. 绘制三维坐标系和直线

figure(1)
hold on
grid on
axis equal
xlabel('x')
ylabel('y')
zlabel('z')
xlim([-10,10])
ylim([-10,10])
zlim([-10,10])
view([30,30])

% 绘制三条直线
x = linspace(-10,10,100);
y = x;
z1 = x;
z2 = x+5;
plot3(x,y,z1,'r','LineWidth',2)
plot3(x,y,z2,'g','LineWidth',2)
plot3(ones(1,100)*5,x,zeros(1,100),'b','LineWidth',2)

2. 绘制旋转曲面

错误: 在绘制第一个旋转曲面时,代码中出现以下错误:

错误使用 surf
Z 必须为矩阵,不能是标量或向量。

出错 untitled2 (第 29 行)
surf(x,y,Z,'FaceAlpha',0.5,'FaceColor','r','EdgeColor','none')

原因: surf 函数要求输入的 Z 坐标必须是一个矩阵,而不是标量或向量。

解决方案: 使用 meshgrid 函数生成与 X 和 Y 坐标相对应的 Z 坐标矩阵。

% 绘制旋转曲面1
theta = linspace(0,360,100)*pi/180;
r = 2*sqrt(2);
x = r*cos(theta);
y = r*sin(theta);
[X,Y] = meshgrid(x,y); % 生成网格矩阵
Z = X; % 将z改为X
surf(X,Y,Z,'FaceAlpha',0.5,'FaceColor','r','EdgeColor','none')

% 绘制旋转曲面2
x = linspace(-10,10,100);
y = x+5;
[X,Y] = meshgrid(x,y); % 生成网格矩阵
theta = linspace(0,360,100)*pi/180;
r = 2*sqrt(2);
Z = r*cos(theta); % 将z改为Z
surf(X,Y,Z,'FaceAlpha',0.5,'FaceColor','g','EdgeColor','none')

3. 显示图例

legend('l1:z=x','l2:z=x+5','l3:x=5','旋转曲面1','旋转曲面2')

完整代码:

figure(1)
hold on
grid on
axis equal
xlabel('x')
ylabel('y')
zlabel('z')
xlim([-10,10])
ylim([-10,10])
zlim([-10,10])
view([30,30])

% 绘制三条直线
x = linspace(-10,10,100);
y = x;
z1 = x;
z2 = x+5;
plot3(x,y,z1,'r','LineWidth',2)
plot3(x,y,z2,'g','LineWidth',2)
plot3(ones(1,100)*5,x,zeros(1,100),'b','LineWidth',2)

% 绘制旋转曲面1
theta = linspace(0,360,100)*pi/180;
r = 2*sqrt(2);
x = r*cos(theta);
y = r*sin(theta);
[X,Y] = meshgrid(x,y); % 生成网格矩阵
Z = X; % 将z改为X
surf(X,Y,Z,'FaceAlpha',0.5,'FaceColor','r','EdgeColor','none')

% 绘制旋转曲面2
x = linspace(-10,10,100);
y = x+5;
[X,Y] = meshgrid(x,y); % 生成网格矩阵
theta = linspace(0,360,100)*pi/180;
r = 2*sqrt(2);
Z = r*cos(theta); % 将z改为Z
surf(X,Y,Z,'FaceAlpha',0.5,'FaceColor','g','EdgeColor','none')

legend('l1:z=x','l2:z=x+5','l3:x=5','旋转曲面1','旋转曲面2')

通过本教程,您已经学会了如何在 Matlab 中绘制三维坐标系、直线和旋转曲面,并解决常见的错误。祝您绘图顺利!

Matlab 绘制三维坐标系和旋转曲面教程:常见错误及解决方案

原文地址: https://www.cveoy.top/t/topic/oQr3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录