Matlab画三维图笔记

19 篇文章 5 订阅
plot3 基本的三维曲线图绘制
plot3(x,y,z),x,y,z均为相同长度的向量,会得到三个向量相同下标构成的的三维坐标(xi,yi,zi)(i=1~n)连的曲线

plot3(X,Y,Z),X,Y,Z均为相同大小的矩阵,均为m*n的矩阵时,plot3命令将绘得m条曲线,每条曲线均为X,Y,Z列向量为(x,y,z)坐标值的曲线

例 三维圆柱形螺旋线,x,y,z均为相同长度的向量

clear
clc
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t);

例 2条三维曲线,第一条是圆柱形螺旋线,第二条是圆锥形螺旋线,X,Y,Z均为501*2的向量

clear
clc
t = 0:pi/50:10*pi;
X=[cos(t);t.*cos(t)/50]'; %[cos(t);t.*cos(t)/50]矩阵为两行,取转置之后变为两列
Y=[sin(t);t.*sin(t)/50]';
Z=[t;t]';
plot3(X,Y,Z);

line 绘制直线

line(X,Y) 如果X,Y均为n维向量,则会以X作为x轴坐标,Y轴作为y轴坐标,构成n个点,画出一条折线图(n-1条直线构成)
line(X,Y) 如果X,Y均为相同大小的m*n矩阵,则会把X的第i列和Y的第i列看成X轴和Y轴,画出一条折线图,一共N条折线图
line(X,Y,Z) X,Y可以同时是n维向量,也可以同时是m*n矩阵,作用和二维的一样

例 从(1,4)到(5,5)画一条直线,然后从(5,5)到(3,6)画一条直线

clear
clc
line([1,5,3],[4,5,6]);


例 画正五边形

clear
clc
X(1)=0;Y(1)=10;%定义初始坐标
edge=5; %定义边数
angle=2*pi/edge; %定义旋转角度
for i=1:edge
    X(i+1)=cos(angle)*X(i)-sin(angle)*Y(i);
    Y(i+1)=cos(angle)*Y(i)+sin(angle)*X(i);
end
line(X,Y);


例 画五角星

clear
clc
X(1)=0;Y(1)=10;%定义初始坐标
edge=5; %定义边数
angle=4*pi/edge; %定义旋转角度
for i=1:edge
    X(i+1)=cos(angle)*X(i)-sin(angle)*Y(i);
    Y(i+1)=cos(angle)*Y(i)+sin(angle)*X(i);
end
line(X,Y);



例 画正六边形和正八边形

clear
clc
%%计算正六边形坐标
X1(1)=0;Y1(1)=10;%定义初始坐标
edge=6; %定义边数
angle=2*pi/edge; %定义旋转角度
for i=1:edge+2 %为了保证维数相同多定义两个点
    X1(i+1)=cos(angle)*X1(i)-sin(angle)*Y1(i);
    Y1(i+1)=cos(angle)*Y1(i)+sin(angle)*X1(i);
end
%%计算正八边形坐标
X2(1)=0;Y2(1)=12;%定义初始坐标
edge=8; %定义边数
angle=2*pi/edge; %定义旋转角度
for i=1:edge
    X2(i+1)=cos(angle)*X2(i)-sin(angle)*Y2(i);
    Y2(i+1)=cos(angle)*Y2(i)+sin(angle)*X2(i);
end
line([X1;X2]',[Y1;Y2]');


例 画三维直线 XYZ均为向量

clear
clc
line([1,2],[4,5],[5,7]);
view(45,45); %由于line画出的图默认显示的是xoy面的投影,这里通过view进行三维选择(Rotate 3D)
hold on
line([1,2,3],[4,5,9],[5,7,7]);


例 画三维直线 XYZ均为矩阵

clear
clc
line([8 0 7;10 8 8;7 9 7],[4 7 0;7 0 1;2 3 8],[14 1 15;6 9 6;19 8 4]);
view(45,45);

view 控制视角

view(AZ,EL) AZ为视角点与原点连线投影到xoy面与y轴负向所称夹角,EL为视角点与原点连线与xoy面的投影所成夹角
view([X Y Z]) 设置坐标点XYZ为视角点
view(2) 使用默认的 2-D 视角, AZ = 0, EL = 90.
view(3) 使用默认的 3-D 视角, AZ = -37.5, EL = 30.

mesh 普通三维网格曲面,网格图,在行和列上绘制一系列曲线,构成网格
mesh*和surf*一般情况下需要配合meshgrid使用
例 使用普通三维网格曲面绘制抛物面

clear  
clc  
x=-10:0.1:10;  
y=-10:0.1:10;  
[X,Y]=meshgrid(x,y);  
Z=X.^2+Y.^2;    
mesh(X,Y,Z);


meshc 带等高线的三维网格曲面,在mesh基础上,在底部绘制轮廓图
例 使用带等高线的三维网格曲面绘制锥面

meshz 带底座的三维网格曲面,在mesh基础上,在网格四周绘制“帘子”
例 使用带底座的三维网格曲面绘制双峰函数

clear  
clc  
[X,Y] = meshgrid(-3:.125:3);
Z = peaks(X,Y);
meshz(X,Y,Z) 



waterfall 瀑布图,类似于meshz函数,但在矩阵的列之间不生成线
例 瀑布图

clear  
clc  
x=-10:0.5:10;  
y=-8:0.5:8;  
[X,Y]=meshgrid(x,y);  
Z=sin(sqrt(X.^2+Y.^2))./sqrt(X.^2+Y.^2); 
waterfall(X,Y,Z);


surf 曲面,和mesh的区别是,surf在小矩形上做颜色插值

%参数方程的抛物面
clear  
clc  
u=0:0.1:10;
t=0:pi/50:2*pi;
[U,T]=meshgrid(u,t);
X=U.*cos(T);
Y=U.*sin(T);
Z=U.*U;
surf(X,Y,Z);

surfc在surf基础上,在底部绘制轮廓图

%参数方程的锥面
clear  
clc  
u=0:0.1:10;
t=0:pi/50:2*pi;
[U,T]=meshgrid(u,t);
X=U.*cos(T);
Y=U.*sin(T);
Z=U;
surfc(X,Y,Z);


surfl 在surf基础上,加入光照

clear  
clc  
[x,y] = meshgrid(-3:1/8:3);
z = peaks(x,y);
surfl(x,y,z);
shading interp %进行色彩的插值处理,使色彩平滑过渡
colormap(gray);  %将彩色图像映射为灰度图像
axis([-3,3,-3,3,-8,8]) %设置坐标范围


shading 是用来处理色彩效果的,分以下三种:
no shading 一般的默认模式 即shading faceted
shading flat 在faceted的基础上去掉图上的网格线
shading interp 在flat的基础上进行色彩的插值处理,使色彩平滑过渡

%shading
clear  
clc 
subplot(1,3,1)
sphere(16)
axis square
shading flat
title('Flat Shading')

subplot(1,3,2)
sphere(16)
axis square
shading faceted
title('Faceted Shading')

subplot(1,3,3)
sphere(16)
axis square
shading interp
title('Interpolated Shading')


ezplot直接绘图

ezplot(FUN) 直接使用函数表达式绘图,函数表达式也可以自定义的函数名

clear
clc
ezplot('x.*y + x.^2 - y.^2 - 1');

例 使用@指定坐标轴

clear
clc
subplot(1,2,1), ezplot('1./z - log(z) + log(-1+z) + t - 1')
%为了避免歧义,建议用下面的方式
subplot(1,2,2), ezplot(@(z,t)1./z - log(z) + log(-1+z) + t - 1)





ezplot3(FUNX,FUNY,FUNZ) 使用参数方程x=x(t),y=y(t),z=z(t)画三维图

clear
clc
ezplot3('cos(t)','t.*sin(t)','sqrt(t)')



ezcontour(FUN) 画等高线

clear
clc
ezcontour('x*exp(-x^2 - y^2)')



此外,还有一系列ez*函数,如ezpolar, ezcontourf, ezsurf, ezmesh, ezsurfc, ezmeshc,有兴趣的自己查帮助文档



  • 42
    点赞
  • 208
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值