有时候用matlab画三维图像时候需要在里面插入一些二维曲线,来显示一些对比情况。
方法就是图像的叠加,也就是 hold on 语句,还有一点, 画三维、二维曲线,用 plot3 语句
至于说怎么画三维面,老多大佬都有,随便找吧。这里就跟大家分享两点:
1、三维坐标画二维、三维曲线。
2、三维图像和二维曲线同时表示。
1、三维图像里面生成多条曲线的最简单操作:
其中有 y 坐标不变,也就是 z = f (x) 的曲线,有 x、y 都变的,也就是 z = f (x,y) 曲线。
实际上因为三维图像在画的过程中要么点对点,要么生成数组,点对点就在下面程序里面,数组在后面。
点对点因为 x 有51个点,生成的 y 也有51个点,用矩阵阵也行,用 y = g(x) 也行。
- 如果是 y 不变的情况,生成个1行51列的矩阵,z=f(x)时候需要y等于几,就把这个矩阵里面的数全弄成那个。
- 如果z = f (x,y)时候,需要把 y 和 x 的关系式列出来。
clear
clc %基础设置
%% 0<x<0.5
x = 0:0.01:0.5; %设置坐标范围
y = zeros(1,51);
z1 = 4*x-4*x.^2; %第一条曲线
plot3(x,y,z1,'b')
hold on
x = 0:0.01:0.5;
y = x;
z2=2*x.*(2-3*x); %第二条曲线分段
plot3(x,y,z2,'r')
hold on
%% 0.5<x<1
x = 0.5:0.01:1;
y = zeros(1,51);
z1 = 4*x-4*x.^2; %第一条曲线
plot3(x,y,z1,'b')
hold on
x = 0.5:0.01:1;
y = 1-x;
z2=2*(1-x).*(3*x-1); %第二条曲线分段
plot3(x,y,z2,'r')
hold on
axis([0 1 0 1 0 1]); %设置范围[xmax xmin ymax ymin zmax zmin]
grid on %生成网格
xlabel('x'); % x轴名称
ylabel('y'); % y轴名称
zlabel('z'); % z轴名称
简单来说就是画线段然后叠加,注意一点就行,二维曲线用 plot3 ,它跟二维的使用方法一样的,就是( x , y )变成了 ( x , y , z ) 其它的,像设置线段类型,设置线段颜色完全一样。图像如下:
2、三维图像和二维曲线同时表示:
说破天,还是 hold on 叠加,但是三维图像画的方式就多了,plot3(x,y,z))、meshc(x,y,z) 、meshz(x,y,z) 、surfc(x,y,z) 愿意用哪个用哪个。
clear
clc %基础设置
t=0:.01:1; %三维曲面
[y,x]=meshgrid(t);%形成格点矩阵
z3=2*(-(y.*y)-2*(x.*x)-y+2*x+2*y.*x);
surf(y,x,z3);
hold on
%% 0<x<0.5
x = 0:0.01:0.5; %设置坐标范围
y = zeros(1,51);
z1 = 4*x-4*x.^2; %第一条曲线
plot3(x,y,z1,'b')
hold on
x = 0:0.01:0.5;
y = x;
z2=2*x.*(2-3*x); %第二条曲线分段
plot3(x,y,z2,'r')
hold on
%% 0.5<x<1
x = 0.5:0.01:1;
y = zeros(1,51);
z1 = 4*x-4*x.^2; %第一条曲线
plot3(x,y,z1,'b')
hold on
x = 0.5:0.01:1;
y = 1-x;
z2=2*(1-x).*(3*x-1); %第二条曲线分段
plot3(x,y,z2,'r')
hold on
axis([0 1 0 1 0 1]); %设置范围[xmax xmin ymax ymin zmax zmin]
grid on %生成网格
xlabel('x'); % x轴名称
ylabel('y'); % y轴名称
zlabel('z'); % z轴名称