一起来学matlab-matlab学习笔记9
高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色
觉得有用的话,欢迎一起讨论相互学习~Follow Me
参考书籍
《matlab 程序设计与综合应用》张德丰等著 感谢张老师的书籍,让我领略到matlab的便捷
《MATLAB技术大全》葛超等编著 感谢葛老师的书籍,让我领略到matlab的高效
图形的高级控制
视点控制和图形旋转
视点控制
日常生活中从不同的视点观察物体所看到的图形是不同的,同样用户从不同的角度绘制的三维图形的形状也是不一样的。视点位置可由方位角和仰角表示,方位角又称旋转角,它是视点位置在平面上的投影与轴形成的角度,其中正值表示逆时针,负值表示顺时针。仰角又称视角它是XY平面的上仰或下仰角,正值表示视点在XY面上方,负值表示视点在XY面下方。
-
为了使图形的效果更逼真,有时需要从不同的角度观看图形。方位角和俯仰角是视点相对于 坐标原点 而言,可以通过view函数指定。既可以通过视点的位置指定,也可以通过设置方位角和俯仰角的大小指定。view函数的调用格式如下。
- view(az,el)、view([az,el]):指定方位角和俯仰角的大小。
- view([x,y,z]):指定视点的位置
- view(2):选择二维默认值,即az=0、el=90。
- view(3):选择三维默认值,即az=-37.5、el=30。
- view(T):通过变换矩阵T设置视图,T是一个4×4的矩阵,如通过viewmtx生成的透视矩阵
- [az,el]=view:返回当前的方位角和俯仰角。
- T=view:返回当前的变换矩阵。
注意:指令中,az是方位角(azimuth),el是俯视角(elevation)。它们的单位是“度”。vx、vy是视点的直角坐标若绘制三维图形时,不使用view指令,那么MATLAB将使用默认的视点设置:az=37,5°,el=30°。当az=0°,el=90°时,图形将以习惯的平面直角坐标表现
MATLAB图形窗可交互式调节视点,为获得最佳视觉效果,用户先通过鼠标调节视点,然后再用指令view把相应的视点加以固定。
从不同的视点绘制多峰函数曲面
subplot(2,2,1);mesh(peaks);
view(-37.5,30);
subplot(2,2,2);mesh(peaks);
view(0,90);
title('azimuth=0,elevation=90')
subplot(2,2,3);mesh(peaks);
view(90,0);
title('azimuth=90,elevation=0')
subplot(2,2,4);mesh(peaks);
view(-7,-10);
title('azimuth=-7,elevation=-10')
图形旋转
- 图形的旋动即图形的旋转,命令为:rotate(h,direction,alpha,orgin).其中,h为被旋转的对象;direction为方向轴,可用求坐标[theta,phi]或直角坐标[x,y,z]表示;alpha为按右手法则旋转的角度。
- 旋转图形示例
shg;clf;
[X,Y]=meshgrid([-3:.2:3]);
Z=4*X.*exp(-X.^2-Y.^2);
G=gradient(Z);
subplot(1,2,1),surf(X,Y,Z,G)
subplot(1,2,2),h=surf(X,Y,Z,G)
rotate(h,[-2,-2,0],30,[2,2,0]),colormap(cool)
- 左边为图形旋转前,右边为图形旋转后
颜色的使用
颜色的向量表示
- MATLAB提供了许多在二维和三维空间内显示可视信息的工具。例如,看一条sin函数的曲线图就会比一堆数据提供更多的信息。这种用图表和图形来表示数据的技术叫做数据可视化MATLAB不仅是一个强大的计算工具,并且在以引人人胜和直观方式可视地表示数据方面也很有特色。
- 但是很多时候,一个简单的二维或三维图形不能一次显示出想要提供的全部信息。这时,颜色可以对图形提供一个附加的维数。前面章节讨论的许多绘图函数都可以接受一个可用的颜色参量,来增加这附加的维数
- MATLAB有一个叫颜色映像的数据结构来代表颜色值。颜色映像定义为一个有三列和若干行的
矩阵。利用0到1之间的数,矩阵的每一行都代表了一种色彩。任一行的数字都指定了一个RGB值,
即红、黄、蓝三种颜色的强度,形成一种特定的颜色。
色图
- 色图(Colormap)是MATLAB系统引人的概念。在MATLAB中,每个图形窗口只能有一个色图。色图是m×3的数值矩阵,它的每一行是RGB三元组。色图矩阵可以人为地生成,也可以调用MATLAB提供的函数来定义色图矩阵。
- 语句colormap(M):将矩阵M作为当前图形窗口所用的颜色映像。例如,colormap(cool)装入了一个有64个输入项的cool颜色映像。colormap default装入了默认的颜色映像(hsv)
- 接受颜色参量的绘图函数中的颜色参量通常采用以下三种形式之一:(1)字符串。代表plot颜色或线型表中的一种颜色,例如,'r'代表红色;(2)三个输入的行向量,它代表一个单独的RGB值,如[.25,.50.75];(3)矩阵。如果颜色参量是一个矩阵,其元素作了调整,并把它们用作当前颜色映像的下标。
- 按默认,上面所列的各个颜色映像产生一个64×3的矩阵,指定了64种颜色RGB的描述。这些函数都接受一个参量来指定所产生矩阵的行数。例如,hot(m)产生一个m×3的矩阵,它包含的RGB颜色值的范围从黑经过红、橘红和黄,到白。
- 大多数计算机在一个8位的硬件查色表中一次可以显示256种颜色,当然有些计算机的显示卡可以同时显示更多的颜色。这就意味着在不同的图中,一般一次可以用三或四个64×3的颜色映像。如果使用了更多的颜色映像输入项,计算机必须经常在它的硬件查色表中调出输入项。例如,当在画MATLAB图形时背景图案发生了变化,就是发生了这种情况。所以,除非计算机有一次显示更多种颜色的显示卡,最好任何一次所用的颜色映像输入项数都小于256。
颜色的显示
- 可以有多种途径来显示一个颜色映射,其中一个方法是观察颜色映像矩阵的元素。eg:
>> hot(8)
ans =
0.3333 0 0
0.6667 0 0
1.0000 0 0
1.0000 0.3333 0
1.0000 0.6667 0
1.0000 1.0000 0
1.0000 1.0000 0.5000
1.0000 1.0000 1.0000
- 使用pcolor来显示一个颜色映像
n=20;
colormap(jet(n))% jet色图方式
pcolor([1:n+1;1:n+1]')
title(' Using Pcolor to Display a Color Map')
- 在MATLAB中,colorbar命令的主要功能是显示指定颜色刻度的颜色标尺。colorbar更新最近生成的颜色标尺,如果当前坐标轴系统中没有任何颜色标尺,则在图形的右侧显示一个垂直的颜色标尺,其调用格式如下。
- colorbar('horiz'):在当前的图形下面放一个水平的颜色条。
- colorbar('vert'):在当前的图形右边放一个垂直的颜色条。
- 对无参量的colorbar,如果当前没有颜色条就加一个垂直的颜色条,或者更新现有的颜色条。
colormap(cool);
z=peaks(40);
subplot(2,2,1);
surf(z);
caxis([-2 2]);
colorbar;
z=peaks(40);
subplot(2,2,2);
surf(z);
caxis([-2 2]);
colorbar('vert');
z=peaks(40);
subplot(2,2,3);
surf(z);
caxis([-2 2]);
colorbar horiz;
z=peaks(40);
subplot(2,2,4);
surf(z);
caxis([-2 2]);
colorbar horiz
颜色映像的调整
- 颜色映像就是矩阵,意味着你可以像其他数组那样对它们进行操作。函数brighten就利用这一点通过调整一个给定的颜色映像来增加或减少暗色的强度。brighten(n)(0<n<=1)使当前颜色映像变亮;而bnghten(n)(-1<=n<=0)使它变暗;brighten(n)后加一个brighten(-n)使颜色映像恢复原来状态。newmap=brighten(cmap,n)命令创建一个比当前颜色映像更暗或者更亮的新的颜色映像,而并不改变当前的颜色映像。newmap=brighten(cmap,n)命令对指定的颜色映像创建一个已调整过的式样,而不影响当前的颜色映像或指定的颜色映像。
- 可以通过生成m×3的矩阵mymap来建立用户自己的颜色映像,并用colormap(mymap)来安装它。颜色映像矩阵的每一个值都必须在0和1之间。如果企图用大于或小于3列的矩阵或者包含着比0小比1大的任意值,函数colormap会提示一个错误然后退出。
- 通常,颜色映像进行过调节,把数据从最小扩展到最大,也就是说整个颜色映像都用于绘图。有时也许想改变颜色使用的方法。函数caxis代表颜色轴,因为颜色增加了另一个维数,它允许对数据范围的一个子集使用整个颜色映像或者对数据的整个集合只使用当前颜色映像的一部分。
- [cmin,cmax]=caxis返回映射到颜色映像中第一和最后输入项的最小和最大的数据。它们通常被设成数据的最小值和最大值。例如,函数mesh(peaks)会画出函数peaks的网格图,并把颜色轴caxis设为[-6.5466,8.0752],即z的最小值和最大值。这些值之间的数据点使用从颜色映像中经插值得到的颜色
- caxis([cmin,cmax])对cmin和cmax范围区内的数据使用整个颜色映像。比cmax大的数据点用与cmax值相关的颜色绘图,比cmin小的数据点的颜色用与cmin值相关的颜色绘图。如果小于min(data)和/或cmax大于max(data),那么与cmin和/或cmax点相关的颜色将永远用不到。也就是说,只用到和数据相关的那一部分颜色映像。caxis('auto')设置cmin和cmax的默认值。
% 人为增加一个颜色的维度
[X,Y,Z] = sphere;
C = Z;surf(X,Y,Z,C)
caxis([-1 3])
三维表面图形的着色
- 三维表面图实际上就是在网格图的每一个网格片上涂上颜色。surf函数用默认的着色方式对网格片着色。除此之外,还可以用shading命令来改变着色方式。
- shading faceted命令:将每个网格片用其高度对应的颜色进行着色,但网格线仍保留着,其颜色是黑色。这是系统的默认着色方式。
- shading flat命令:将每个网格片用同一个颜色进行着色,且网格线也用相应的颜色,从而使得图形表面显得更加光滑。
- shading interp命令:在网格片内采用颜色插值处理,得出的表面图显得最光滑。
三种着色方式的效果展示
[x,y,z]=sphere(30);
colormap(flag);
subplot(1,3,1);
surf(x,y,z);
axis equal
subplot(1,3,2);
surf(x,y,z);shading flat;
axis equal
subplot(1,3,3);
surf(x,y,z);shading interp;
axis equal
光照控制
- light('color',optionl,'style',option2',position',option3):灯光设置。在该指令使用前,采用的是等强度各处相等的漫射光。一旦该指令被执行,虽然光源本身并不出现,但图形上“轴"、“面”等子对象所有与光有关的属性(如背景光、边缘光)都被激活。
- option1:可采用RGB三元组或相应的色彩字符,如[1 0 0]或'r'都代表红光。
- option2:有两个取值:'infimte'和'local'。前者表示无穷远光,后者为近光。
- option3:总为直角坐标的三元组形式。对远光,它表示光线穿过该点射向原点;对近光,它表示光源所在位置
- lightingoptions:设置照明模式:该指令只有在light指令执行后才起作用。options有以下
四种取值。- flat:射人光均匀洒落在图像对象的每个面上,主要与faceted配用。它是默认模式。
- gouraund:先对顶点颜色插补,再对顶点勾画的面色进行插补。用于曲面表现
- phong:对顶点处法线插值,再计算各像素的反光。表现效果最好,但费时较多
- none:使所有光源关闭。
- material options:使用预定义反射模式。为用户使用方便,MATLAB提供了四种预定义表面反射模式,即options取值。
- shiny:使对象比较明亮。镜反射份额较大,反射光颜色仅取决于光源颜色。
- dull:使对象比较暗淡。漫反射份额较大,没有镜面亮点,反射光颜色仅取决于光源颜色。
- metal:使对象带金属光泽。镜反射份额很大,背景光和漫射光份额很小。反射光源和图形表面两者的颜色。该模式为默认模式。
light
% 示例1:
figure(1);
[x,y,z]=peaks;
surf(x,y,z);
shading interp;
light('Color',[1 0 1],'Style','local','Position',[-4,-4,10])
% 示例2:
figure(2);
[X,Y,Z]=sphere(40);
colormap(jet)
subplot(1,2,1);surf(X,Y,Z);shading interp
light ('position',[0 -10 1.5],'style','infinite')
lighting phong
material shiny
subplot(1,2,2);surf(X,Y,Z,-Z);shading flat
light;lighting flat
light('position',[-1,-1,-2],'color','y')
light('position',[-1,0.5,1],'style','local','color','w')
% 示例三
figure(3);
[x,y,z]=peaks(20);
subplot(1,2,1);
surf(x,y,z)
shading interp;
material([0.2,0.3,0.6,10,0.4]);
light('color','r','position',[0 1 0],'style','local')
lighting phong
subplot(1,2,2);
surf(x,y,z)
shading flat;
material shiny;
light('color','w','position',[-1 0.5 1],'style','local')
lighting flat
matlab学习笔记9 高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色的更多相关文章
-
matlab学习笔记8 基本绘图命令-基本绘图操作
一起来学matlab-matlab学习笔记8 基本绘图命令_2基本绘图操作 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 ...
-
matlab学习笔记8 基本绘图命令-三维绘图
一起来学matlab-matlab学习笔记8 基本绘图命令_6 三维绘图 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 ...
-
matlab学习笔记8 基本绘图命令-初级二维绘图/交互式绘图
一起来学matlab-matlab学习笔记8 基本绘图命令_5 初级二维绘图/交互式绘图 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用&g ...
-
matlab学习笔记8 基本绘图命令-特殊图形绘制
一起来学matlab-matlab学习笔记8 基本绘图命令_3 特殊图形绘制 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等 ...
-
matlab学习笔记8 基本绘图命令-图形窗口简介
一起来学matlab-matlab学习笔记8 基本绘图命令_1 图形窗口简介 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等 ...
-
matlab学习笔记8 基本绘图命令-LineSpec线条设定
一起来学matlab-matlab学习笔记8 基本绘图命令_4 LineSpec线条设定 觉得有用的话,欢迎一起讨论相互学习~Follow Me 绘图函数接受线条设定作为参数并相应地修改生成的图形.您 ...
-
matlab学习笔记9 高级绘图命令_1 图形对象_根对象,轴对象,用户控制对象,用户菜单对象
一起来学matlab-matlab学习笔记9 高级绘图命令_1 图形对象_根对象,轴对象,用户控制对象,用户菜单对象 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matl ...
-
Matlab学习笔记 figure函数
Matlab学习笔记 figure函数 matlab中的 figure 命令,能够创建一个用来显示图形输出的一个窗口对象.每一个这样的窗口都有一些属性,例如窗口的尺寸.位置,等等.下面一一介绍它们. ...
-
matlab学习笔记---(1)
Matlab学习笔记 一. Desktop Basics (Matlab 基础知识) 当你打开Matlab的时候,matlab按照以下默认的方式展示出来. 该桌面主要包括以下几部分内容: 当前文件夹: ...
随机推荐
-
http://detectmobilebrowsers.com/
<%@ Page Language="C#" %> <%@ Import Namespace="System.Text.RegularExpressio ...
-
poj3254 状态压缩dp
题意:给出一个n行m列的草地,1表示肥沃,0表示贫瘠,现在要把一些牛放在肥沃的草地上,但是要求所有牛不能相邻,问你有多少种放法. 分析:假如我们知道第 i-1 行的所有的可以放的情况,那么对于 ...
-
linux shell中的特殊符号
该内容,均来自此网址(http://www.92csz.com/study/linux/12.htm).在下只是把那些命令的截图给去了. 你在学习linux的过程中,也许你已经接触过某个特殊符号,例如 ...
-
CF 508D Tanya and Password(无向图+输出欧拉路)
( ̄▽ ̄)" //不知道为什么,用scanf输入char数组的话,字符获取失效 //于是改用cin>>string,就可以了 //这题字符的处理比较麻烦,输入之后转成数字,用到函 ...
-
css3常用方法以及css3选择器
最重要的 CSS3 模块包括: 选择器 框模型 背景和边框 文本效果 2D/3D 转换 动画 多列布局 用户界面 CSS3 边框 CSS3 边框 通过 CSS3,您能够创建圆角边框,向矩形添加 ...
-
java面向对象的三大特性——多态
多态 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底 ...
-
我的 FPGA 学习历程(10)—— 实验:数码管驱动
根据黑金 AX301 手册,数码管位选信号命名为 SEL[5:0],其中 SEL[5] 对应最左边的数码管,而SEL[0] 对应最右边数码管:作为约定,在下面的描述中我们对应的称之为数码管 5 和数码 ...
-
各种 mv power cell
1. retention register : VDDB 是 backup power,当primary power shutoff 时 backup 会继续供电,将 reg 当前状态保存下来 2. ...
-
python爬虫系列:做一个简单的动态代理池
自动 1.设置动态的user agent import urllib.request as ure import urllib.parse as upa import random from bs4 ...
-
Loadrunner 手动关联技术
录制成功,回放失败,怀疑和动态数据有关: 1 重新录制一份脚本,两次录制的脚本进行比对,确定动态数据,复制动态数据: 2 找到第一次产生该动态数据的响应对应的相应请求: 1) 拷贝脚本中适当长度的 ...