第六讲 MATLAB可视化(二)绘三维图
【目录】
一、三维图形绘制步骤 1
二、三维绘图基本操作 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 matlab等高线填充颜 | 设置轴的范围与刻度、坐标分隔线 | 同二维 |
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]); % 选择观察点
box on; % 显示坐标框
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]);box on;
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在绘三维网线图和曲面图时,一般进行消隐处理。为得到透视效果,用以下命令:
hidden off -透视被遮挡的图形
hidden on -消隐被遮挡的图形
【例】透视效果演示
[X0,Y0,Z0]=sphere(30); % 产生单位球面的三维坐标
X=2*X0;Y=2*Y0;Z=2*Z0; % 产生半径为2的球面坐标
surf(X0,Y0,Z0); % 画单位球面
shading interp % 对球的着进行浓淡细化处理
hold on; % 绘图保持
mesh(X,Y,Z) % 绘大球
colormap(hot); % 定义表
hold off % 取消绘图保持
hidden off % 产生透视效果
axis equal,axis off % 坐标等轴并隐藏
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),shading interp
%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]),lighting flat
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),shading interp;colormap(copper)
light('position',[0,-15,1]);lighting phong
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); % 计算函数值
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论