第05讲MATLAB绘三维图.docx
- 文档编号:29860359
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:20
- 大小:515.97KB
第05讲MATLAB绘三维图.docx
《第05讲MATLAB绘三维图.docx》由会员分享,可在线阅读,更多相关《第05讲MATLAB绘三维图.docx(20页珍藏版)》请在冰豆网上搜索。
第05讲MATLAB绘三维图
第五讲MATLAB可视化
(二)绘三维图
【目录】
一、三维图形绘制步骤2
二、三维绘图基本操作2
1、三维线图2
2、三维网线图3
3、三维曲面图4
三、透视、镂空和裁切5
1、图形的透视5
2、图形的镂空6
3、图形的裁切7
四、三维图形的精细控制8
1、视点与旋动8
2、色彩控制9
3、浓淡处理11
五、照明和材质处理12
六、简洁绘图指令13
【正文】
一、三维图形绘制步骤
步骤
典型指令
1
三维曲线数据:
先取一个参变量采样向量然后计算各坐标数据向量
t=pi*(0:
100)/100;
x=f1(t);y=f2(t);z=f3(t);
三维曲面数据:
产生自变量采样向量;由自变量向量产生格点矩阵;计算格点矩阵相对应的函数值矩阵
x=x1:
dx:
x2;y=y1:
dy:
y2;
[X,Y]=meshgrid(x,y);
Z=f(x,y);
2
选定图形窗及子窗位置:
同二维
3
调用三维曲线绘图指令:
线型、色彩、数据点形
plot3(x,y,z,'b-')
调用三维曲面绘图指令
Mesh(X,Y,Z);
4
设置轴的范围与刻度、坐标分隔线
同二维
5
图形注释:
图名、坐标名、图例、文字
同二维
6
着色、明暗、灯光、材质处理
colormap,shading,light,material
7
视点、三度(横、纵、高)比
view,aspect
二、三维绘图基本操作
1、三维线图
用来画三维曲线,三维曲线与一组(x,y,z)坐标相对应的点连接而成。
绘图格式为:
plot3(X,Y,Z,'s')
plot3(X1,Y1,Z1,'s1',X2,Y2,Z2,'s2',...)
(1)X、Y、Z是同维向量时,则绘制以X、Y、Z元素为x、y、z坐标的三维曲线;
(2)X、Y、Z是同维矩阵时,则以X、Y、Z对应列元素为x、y、z坐标绘制多条曲线,曲线条数等于矩阵的列数;
(3)(X1,Y1,Z1,'s1')与(X2,Y2,Z2,'s2')的结构与作用和(X,Y,Z,'s')相同,表示同一指令绘两组以上曲线;
(4)s、s1、s2的意义与二维相同。
【例】绘单条三维曲线
t=(0:
0.02:
2)*pi;%三维坐标用参数方程表示
x=sin(t);y=cos(t);z=cos(2*t);%t为参数,得到三个同维向量
plot3(x,y,z,'b-',x,y,z,'bd');%绘蓝色线和菱形的点
view([-82,58]);%选择观察点
boxon;%显示坐标框
legend('链','宝石')%图例
【例】绘多条三维曲线
t=(0:
0.02:
2)'.*pi;%三维坐标用参数方程表示
x=sin(t);y=cos(t);z=cos(2*t);%t为参数,得到三个同维向量
r=0.1:
0.1:
1;%画系数不同的10条曲线
x=x*r;y=y*r;z=z*r;
plot3(x,y,z);
view([-82,58]);boxon;
2、三维网线图
以网格的形式显示三维图形。
通常使用方形网格,所以网格上的每一格点必需有一三维坐标(x,y,z)与之相对应。
绘图指令如下:
(1)mesh(Z)-以矩阵Z的列下标为x、行下标为y、矩阵的元素为z组成三维网格数据绘制网线图;
(2)mesh(X,Y,Z)-X、Y、Z是同维矩阵,分别以三个矩阵对应位置的元素x、y、z组成三维网格数据绘制网线图;
(3)mesh(X,Y,Z,C)-C为与其他三个矩阵同维,给出每个格点的用色矩阵。
缺省时C=Z。
(色表说明见后)
其中,画z=f(x,y)所代表的网格数据产生如下:
(1)x=x1:
dx:
x2;y=y1:
dy:
y2;
X=ones(size(y))*x;
Y=y*ones(size(x));
(2)x=x1:
dx:
x2;y=y1:
dy:
y2;
[X,Y]=meshgrid(x,y);
然后根据函数求出Z矩阵。
【例】用网线图表现函数
。
clf;%清图形窗口
x=-4:
4;y=x;%x、y的取值范围都是-4到4
[X,Y]=meshgrid(x,y);%形成采样点矩阵
Z=X.^2+Y.^2;%计算函数值
mesh(X,Y,Z);%绘网格图
colormap(hot);%选用色图
3、三维曲面图
将网线图的网格填色,形成曲面图。
格式为:
surf(Z)、surf(X,Y,Z)、surf(X,Y,Z,C)。
含义同网线图。
【例】用曲面图表现函数
。
clf;x=-4:
4;y=x;
[X,Y]=meshgrid(x,y);
Z=X.^2+Y.^2;
surf(X,Y,Z);
colormap(hot);
三、透视、镂空和裁切
1、图形的透视
Matlab在绘三维网线图和曲面图时,一般进行消隐处理。
为得到透视效果,用以下命令:
hiddenoff-透视被遮挡的图形
hiddenon-消隐被遮挡的图形
【例】透视效果演示
[X0,Y0,Z0]=sphere(30);%产生单位球面的三维坐标
X=2*X0;Y=2*Y0;Z=2*Z0;%产生半径为2的球面坐标
surf(X0,Y0,Z0);%画单位球面
shadinginterp%对球的着色进行浓淡细化处理
holdon;%绘图保持
mesh(X,Y,Z)%绘大球
colormap(hot);%定义色表
holdoff%取消绘图保持
hiddenoff%产生透视效果
axisequal,axisoff%坐标等轴并隐藏
2、图形的镂空
利用非数(NaN)对图形的剪切处理。
【例】演示利用NaN对图形剪切
t=linspace(0,2*pi,100);%产生参数
r=1-exp(-t/2).*cos(4*t);%旋转母线
[X,Y,Z]=cylinder(r,60);%创建圆柱
ii=find(X<0&Y<0);%确定x-y平面第四象限的坐标
%Z(ii)=NaN;%剪切
surf(X,Y,Z);colormap(spring),shadinginterp
%light('position',[-3,-1,3],'style','local')%设置光源
%material([0.5,0.4,0.3,10,0.3])%设置表面反射
【例】演示利用NaN对图形镂空
P=peaks(30);%Matlab提供的一个典型三维函数
P(18:
20,9:
15)=NaN;%镂空
surfc(P);colormap(summer)%加投影等高线的曲面
light('position',[50,-10,5]),lightingflat
material([0.9,0.9,0.6,15,0.4])
3、图形的裁切
镂空处理不能产生切面,为看清图形需要切的表面,把被切部分强制为○。
【例】表现切面
clf;x=[-8:
0.05:
8];y=x;[X,Y]=meshgrid(x,y);%产生格点数据
ZZ=X.^2-Y.^2;%计算函数值
ii=find(abs(X)>6|abs(Y)>6);%确定超出[-6,6]范围的格点下标
ZZ(ii)=zeros(size(ii));%强制为0
surf(X,Y,ZZ),shadinginterp;colormap(copper)
light('position',[0,-15,1]);lightingphong
material([0.8,0.8,0.5,10,0.5])
四、三维图形的精细控制
1、视点与旋动
(1)视点,即观察点,如下图所示。
Matlab控制视点的命令为:
view([az,el])-通过方位角az、俯仰角el来设置视点,单位是度。
(二维图缺省为0、90度。
三维缺省为37.5、30度)
view([vx,vy,vz])-通过视点的直角坐标点来设定。
(2)图形的旋动即图形的旋转,命令为:
rotate(h,direction,alpha,orgin),其中:
h-被旋转的对象;
direction-方向轴,可用球坐标[theta,phi]或直角坐标[x,y,z]表示;
alpha-按右手法则旋转的角度;
orgin-支点。
【例】旋转指令示例
shg;clf;%图形窗口置前,清除
[X,Y]=meshgrid([-2:
.2:
2]);%取格点坐标
Z=4*X.*exp(-X.^2-Y.^2);%计算函数值
G=gradient(Z);%近似梯度
subplot(1,2,1),surf(X,Y,Z,G)%子图1画曲面
subplot(1,2,2),h=surf(X,Y,Z,G);%子图2画曲面
rotate(h,[-2,-2,0],30,[2,2,0]),colormap(jet)%旋转
2、色彩控制
(1)用色风格函数
colordefC-对屏幕上所有子对象设置缺省值;
colordef(fig,C)-对图形窗fig的所有子对象设置缺省
h=colordef('new',C)-对新图形窗设置
whitebg-使当前图形窗背景色在黑白间切换
whitebg(fig)-切换指定窗
whitebg(C)-使当前图形窗背景色变为C指定的颜色
C
轴背景色
图背景色
轴标色
色图
画线用色次序
White
白
淡灰
黑
Jet
蓝,深绿,红,青,洋红,黄,黑
Black
黑
黑
白
jet
黄,洋红,青,红,淡绿,蓝,淡灰
(2)色图
一种色彩用[R,G,B]基色三元行数组表示。
取值在(0,1)之间。
常用颜色的RGB值:
R
G
B
颜色
色符
R
G
B
颜色
色符
0
0
1
蓝色blue
B
1
0
1
洋红Magenta
M
0
1
0
绿色green
G
1
1
0
黄色yellow
Y
1
0
0
红色red
R
0
0
0
黑色black
B
0
1
1
青色cyan
C
1
1
1
白色white
W
Matlab的每一个图形窗里只能有一个色图,色图为m×3的矩阵,m缺省为64。
下表为定义的色度矩阵。
CM
含义
CM
含义
CM
含义
Autumn
红、黄浓淡色
Gray
灰色调
Prism
光谱交错色
Bone
蓝色调浓淡色
Hot
黑-红-黄-白
Spring
青、黄浓淡色
Colorcube
三浓淡多彩交错色
Hsv
红-红饱和色
Summer
绿、黄浓淡色
Cool
青、品红浓淡色
Jet
篮-红饱和色
Winter
篮、绿浓淡色
Copper
纯铜色调线性浓淡色
Lines
采用plot色
White
全白色
Flag
红-白-蓝-黑交错色
pink
淡粉红色图
【例】显示色图
clf
colormap(bone);
colorbar
【例】用MATLAB预定义的两个色图矩阵构成一个更大的色图阵
%产生20×20的典型函数,C为颜色分量,等于函数值
Z=peaks(20);C=Z;
%计算颜色的最大值、最小值和差。
Cmin=min(min(C));Cmax=max(max(C));DC=Cmax-Cmin;
CM=[autumn;winter];%用两个已知的色图构成新的色图
colormap(CM);%给窗口符色图
subplot(1,3,1),surf(Z,C);%子图1画曲面
caxis([Cmin+DC*2/5,Cmax-DC*2/5]);%把色轴范围定义比C小,
colorbar('horiz')%显示水平色度条
subplot(1,3,2),surf(Z,C);
colorbar('horiz')
subplot(1,3,3),surf(Z,C);
caxis([Cmin,Cmax+DC]);
colorbar('horiz')
3、浓淡处理
shadingflat-用一种颜色
shadinginterp-用线性插值成色
shadingfaceted-勾画出网格线
【例】三种浓淡处理方式比较
clf;Z=peaks(20);colormap(jet)
subplot(1,3,1),surf(Z)
subplot(1,3,2),surf(Z),shadingflat
subplot(1,3,3),surf(Z),shadinginterp
五、照明和材质处理
Matlab不指定光照,图形采用强度各处相等的漫射光。
(1)设置光源命令:
light('color',c1,'style',s1,'position',p1)
其中三个参数:
c1-代表光的颜色,用[r,g,b]表示,缺省[111]
s1-无穷远光='infinite',近光='local'
p1-表示[x,y,z],对于远光,表示穿过该点射向原点
对于近光,指光源的位置
(2)设置照明模式:
lightingflat-均匀洒落在图形对象上(缺省)
lightinggouraud-采用插补
lightingphong-计算反射光,效果最好
lightingnone-关闭光源
(3)控制光效果的材质指令:
materialshiny-使对象比较明亮,镜反射大
materialdull-使对象比较暗淡,漫反射大
materialmetal-使对象带金属光泽(缺省模式)
materialdefault-返回缺省模式
material([kakdksnsc])-对反射五要素设置
ka-均匀背景光的强度
kd-漫反射的强度
ks-反射光的强度
n-控制镜面亮点大小
sc-控制镜面颜色的反射系数
【例】灯光、照明、材质指令所表现的图形
clf;
[X,Y,Z]=sphere(40);%球形坐标
colormap(jet)%选定色图
subplot(1,2,1);surf(X,Y,Z);shadinginterp%子图1绘曲面
light('position',[2,-2,2],'style','local')%近白光
lightingphong%照明模式
material([0.5,0.3,0.5,10,0.5])%材质
subplot(1,2,2);surf(X,Y,Z,-Z);shadingflat%子图2绘曲面
light;%用光源1
lightingflat%照明模式
light('position',[-1,-1,-2],'color','y')%用光源2
light('position',[-1,0.5,1],'style','local','color','w')
%用光源3
material([0.4,0.5,0.3,10,0.3])%材质
六、简洁绘图指令
(1)泛函绘图指令
fplot(fname,lims,tol,linespec)其中:
fname-函数字符串,自变量为x
lims-绘图区域,[x1,x2]、[x1,x2,y1,y1]
tol-精度,缺省为2e-3
linespec-线型、色彩、点形
【例】fplot与一般绘图指令的绘图效果比较
[x,y]=fplot('cos(tan(pi*x))',[-0.4,1.4],0.2e-3);
n=length(x);
subplot(1,2,1);
plot(x,y)
title('\fontsize{20}\fontname{隶书}泛函绘图指令效果')
t=(-0.4:
1.8/n:
1.4)';
subplot(1,2,2);
plot(t,cos(tan(pi*t)))
title('\fontsize{20}\fontname{隶书}等分采样绘图')
(2)一元函数简捷绘图指令
ezplot(F,[x1,x2],fig),其中:
F-函数
[x1,x2]-自变量范围,缺省为[-2*pi,2*pi]
fig-指定图形窗
【例】绘
和它的积分
在
间的图形
symsttao;
y=2/3*exp(-t/2)*cos(sqrt(3)/2*t);
s=subs(int(y,t,0,tao),tao,t);
subplot(1,2,1),ezplot(y,[0,4*pi]);grid
subplot(1,2,2),ezplot(s,[0,4*pi]);grid
title('s=\inty(t)dt')
(3)二元函数简捷绘图指令
【例】在园域上画
的图形
clf
ezsurf('x*y','circ');
shadingflat;
view([-18,28])
【例】使用球坐标参量画部分球壳
x='cos(s)*cos(t)';
y='cos(s)*sin(t)';
z='sin(s)';
ezsurf(x,y,z,[0,pi/2,0,3*pi/2])
view(17,40);shadinginterp;colormap(spring)
light('position',[0,0,-10],'style','local')
light('position',[-1,-0.5,2],'style','local')
material([0.5,0.5,0.5,10,0.3])
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第05讲 MATLAB绘三维图 05 MATLAB 三维