图形修饰处理
图形修饰处理可以渲染和烘托图形的表现手法,使得图形现实感更强,传递的信息更丰富。 图形修饰处理包括视点处理、色彩处理和裁剪处理等方法。
一、视点处理
从不同的视点观察物体,所看到的物体形状是不一样的。同样,从不同视点绘制的图形其形状也是不一样的。
视点位置可由方位角和仰角表示。
- 方位角又称为旋转角,它是视点与原点连线在xy 平面上的投影与y 轴负方向形成的角度,正值表示逆时针,负值表示顺时针。
- 仰角又称为视角,它是视点与原点连线与xy平面的夹角,正值表示视点在xy 平面上方,负值表示视点在xy 平面下方。
下图示意了坐标系中视点的定义,图中箭头方向表示正的方向。
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')
二、 色彩处理
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
三、图形的裁剪处理
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
Matlab学习笔记内容来源于《MATLAB程序设计与应用 第三版》刘卫国主编