Matlab画三维图_读书笔记图画

2022-11-10 15:35:04 浏览数 (2)

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均为相同长度的向量

代码语言:javascript复制
clear
clc
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t);

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

代码语言:javascript复制
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)画一条直线

代码语言:javascript复制
clear
clc
line([1,5,3],[4,5,6]);

例 画正五边形

代码语言:javascript复制
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);

例 画五角星

代码语言:javascript复制
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);

例 画正六边形和正八边形

代码语言:javascript复制
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均为向量

代码语言:javascript复制
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均为矩阵

代码语言:javascript复制
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使用 例 使用普通三维网格曲面绘制抛物面

代码语言:javascript复制
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基础上,在网格四周绘制“帘子” 例 使用带底座的三维网格曲面绘制双峰函数

代码语言:javascript复制
clear  
clc  
[X,Y] = meshgrid(-3:.125:3);
Z = peaks(X,Y);
meshz(X,Y,Z) 

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

代码语言:javascript复制
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在小矩形上做颜色插值

代码语言:javascript复制
%参数方程的抛物面
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基础上,在底部绘制轮廓图 例

代码语言:javascript复制
%参数方程的锥面
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基础上,加入光照 例

代码语言:javascript复制
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的基础上进行色彩的插值处理,使色彩平滑过渡 例

代码语言:javascript复制
%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) 直接使用函数表达式绘图,函数表达式也可以自定义的函数名

代码语言:javascript复制
clear
clc
ezplot('x.*y   x.^2 - y.^2 - 1');

例 使用@指定坐标轴

代码语言:javascript复制
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)画三维图

代码语言:javascript复制
clear
clc
ezplot3('cos(t)','t.*sin(t)','sqrt(t)')

ezcontour(FUN) 画等高线

代码语言:javascript复制
clear
clc
ezcontour('x*exp(-x^2 - y^2)')

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183124.html原文链接:https://javaforall.cn

0 人点赞