Matlab 绘制三维坐标系和旋转曲面教程:常见错误及解决方案
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 中绘制三维坐标系、直线和旋转曲面,并解决常见的错误。祝您绘图顺利!
原文地址: https://www.cveoy.top/t/topic/oQr3 著作权归作者所有。请勿转载和采集!