5.5 MATLAB学习笔记之绘图-图形修饰处理

图形修饰处理

图形修饰处理可以渲染和烘托图形的表现手法,使得图形现实感更强,传递的信息更丰富。 图形修饰处理包括视点处理、色彩处理和裁剪处理等方法。

一、视点处理

从不同的视点观察物体,所看到的物体形状是不一样的。同样,从不同视点绘制的图形其形状也是不一样的。

视点位置可由方位角和仰角表示。

  • 方位角又称为旋转角,它是视点与原点连线在xy 平面上的投影与y 轴负方向形成的角度,正值表示逆时针,负值表示顺时针。
  • 仰角又称为视角,它是视点与原点连线与xy平面的夹角,正值表示视点在xy 平面上方,负值表示视点在xy 平面下方。

下图示意了坐标系中视点的定义,图中箭头方向表示正的方向。

img

MATLAB提供了设置视点的函数view, 其调用格式如下:

view(az,el)

其中 ,az 为方位角,el 为仰角,它们均以度为单位系统默认的视点定义为方位角-37.5°, 仰角30°

例1 从不同视点绘制多峰函数曲面。

程序如下:

subplot(2,2,1);mesh(peaks)
view(-37.5,30)       %指定子图1的视点
title('azimuth=-37.5,elevation=30')
subplot(2,2,2);mesh(peaks)
view(0,90)            %指定子图2的视点
title('azimuth=0,elevation=90')
subplot(2,2,3);mesh(peaks)
view(90,0)             %指定子图3的视点
title('azimuth=90,elevation=0')
subplot(2,2,4);mesh(peaks)
view(-7,-10)           %指定子图4的视点
title('azimuth=-7,elevation=-10')

untitled

二、 色彩处理
1.颜色的向量表示

MATLAB除用字符表示颜色外,还可以用含有3个元素的向量表示颜色。向量元素在[0,1] 范围取值,3个元素分别表示红、绿、蓝3种颜色的相对亮度,称为RGB 三元组。

表1 几种常见颜色的RGB值

*RGB值*颜 色字 符RGB值颜 色字 符
[0 0 1]蓝色b[1 1 1]白色W
[0 1 1]绿色g[0.5 0.5 0.5]灰色
[1 0 0]红色r[0.67 0 1]紫色
[0 1 1]青色C[1 0.5 0]橙色
[1 0 1]品红色m[1 0.62 0.40]铜色
[1 1 0]黄色y[0.49 1 0.83]宝石蓝
[0 0 0]黑色k
2.色图

色图 (Color Map) 是 MATLAB系统引入的概念 。 在MATLAB 中 ,每个图形窗口只能有一个色图。

色图是m×3 的数值矩阵,它的每一行是RGB 三元组。色图矩阵可以人为地生成, 也可以调用MATLAB 提供的函数来定义色图矩阵。色图矩阵的维数由函数调用格式决定。例如:

M=hot;

生成64×3色图矩阵M, 表示的颜色是从黑色、红色、黄色到白色的由浓到淡的颜色。

又如:

P=gray(100);

生成100×3色图矩阵P, 表示的颜色是灰色由浓到淡。

表2 定义色图矩阵的函数

函 数 名含 义函 数 名含 义
autumn红、黄浓淡色jet蓝头红尾饱和值色
bone蓝色调浓淡色lines采用plot绘线色
colorcube三浓淡多彩交错色pink淡粉红色图
cool青、品红浓淡色prism光谱交错色
copper纯铜色调线性浓淡色spring青、黄浓淡色
flag红-白-蓝-黑交错色summer绿、黄浓淡色
gray灰色调线性浓淡色winter蓝、绿浓淡色
hot黑、红、黄、白浓淡色white全白色
hsv两端为红的饱和值色

除 plot 及其派生函数外,mesh 、surf 等函数均使用色图着色。图形窗口色图的设置和改变, 使用colormap 函数,其调用格式如下:

colormap(M)

其中M 代表色图矩阵。

3.三维曲面图形的着色

三维曲面图形实际上就是在网格图的每一个网格片上涂上颜色。 surf 函数用默认的着色方式对网格片着色。除此之外,还可以用shading 命令来改变着色方式,格式如下。

(1)shading faceted:将每个网格片用其高度对应的颜色进行着色,但网格线仍保留,其颜色是黑色。这是系统默认的着色方式。

(2)shading flat:将每个网格片用同一个颜色进行着色,且网格线也用相应的颜色,从而使得图形表面显得更加光滑。

(3)shading interp:在网格片内采用颜色插值处理,得出的表面图显得最光滑。

例2 采用不同着色方式的效果展示。

程序如下:

t=0:pi/20:2*pi;
z=peaks(20);
colormap(jet)
subplot(2,2,1);surf(z)
subplot(2,2,2);surf(z);shading flat
subplot(2,2,3);surf(z);shading interp
subplot(2,2,4);mesh(z);shading interp

untitled

三、图形的裁剪处理

MATLAB 定义的NaN常数可以用于表示那些不可使用的数据,利用这种特性,可以将图形中需要裁剪部分对应的函数值设置成NaN, 这样在绘制图形时,函数值为NaN 的部分将不显示出来,从而达到对图形进行裁剪的目的。

例如,要削掉正弦波顶部或底部大于0.5的部分,可使用下面的程序:

x=0:pi/10:4*pi;
y=sin(x);
i=find(abs(y)>0.5);
x(i)=NaN;
plot(x,y);

例3 绘制两个球面,其中一个球在另一个球里面,将外面的球裁掉一部分,使得能看见里面的球。

程序如下:

[x,y,z]=sphere(20);
%生成外面的大球
z1=z;
z1(:,1:4)=NaN;    %将大球裁掉一部分
c1=ones(size(z1));
surf(3*x,3*y,3*z1,c1)
%生成里面的小球
hold on
z2=z;
c2=2*ones(size(z2));
c2(:,1:4)=3*ones(size(c2(:,1:4)));
surf(1.5*x,1.5*y,1.5*z2,c2)
colormap([0,1,0;0.5,0,0;1,0,0])
grid on
hold off

untitled

Matlab学习笔记内容来源于《MATLAB程序设计与应用 第三版》刘卫国主编

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值