第七讲 图形修饰_第1页
第七讲 图形修饰_第2页
第七讲 图形修饰_第3页
第七讲 图形修饰_第4页
第七讲 图形修饰_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1数学实验第七讲图形修饰和动画制作(了解)Matlab介绍2三维图形的修饰1.颜色映像

图形的一个重要因素就是图形的颜色,对于数值计算,颜色在图形显示中所起的作用不仅仅是美观,主要是它能够提供给用户另外一附加维数——第四维。

Matlab采用颜色映像来处理图形颜色,也即RGB色系。该方法在Matlab语言内的实现是借助于矩阵来完成的,该矩阵为三列矩阵,每一列代表R(红色)、G(绿色)和B(蓝色)中的一个颜色,三者综合构成对应的颜色。2023/2/5一、1.绘图色彩的调整colormap函数

colormap(map),设置map为当前颜色映像矩阵

colormap('default'),恢复当前颜色映像矩阵为默认值

cmap=colormap,获取当前颜色映像矩阵

colormap(ax,…),设置当前axes对象的颜色映像矩阵MATLAB中提供了colormap函数,可以根据颜色映像矩阵对图形对象的色彩进行调整。所谓的颜色映像矩阵就是一个的矩阵,k行表示有k种颜色,每行3个元素分别代表红、绿、蓝三元色的强度值,取值均在[0,1]之间。map的设置有两种,可以人为指定一个元素值均在[0,1]之间的的矩阵,也可以用MATLAB自带的17种颜色映像矩阵。在MATLAB命令窗口分别运行autumn、bone、colorcube、cool、copper、flag、gray、hot、hsv、jet、lines、pink、prism、spring、summer、white和winter函数,就可得到这17种颜色映像矩阵

色图colormap

colormap(CM)设置当前图形窗的着色色图为CM

MATLAB的预定义色图矩阵CMCM含义CM含义autumn红、黄浓淡色jet蓝头红尾饱和值色bone蓝色调浓淡色lines采用plot绘线色colorcube三浓淡多彩交错色pink淡粉红色图cool青、品红浓淡色prism光谱交错色copper纯铜色调线性浓淡色SPRING青、黄浓淡色flag红-白-蓝-黑交错色summer绿、黄浓淡色gray灰色调线性浓淡色winter蓝、绿浓淡色hot黑、红、黄、白浓淡色white全白色hsv两端为红的饱和值色注意:jet时默认色图。2色彩处理(1)颜色的向量表示

MATLAB除用字符表示颜色外,还可以用含有3个元素的向量表示颜色。向量元素在[0,1]范围取值,3个元素分别表示红、绿、蓝3种颜色的相对亮度,称为RGB三元组。[x,y]=meshgrid([-10:0.3:10]);R=sqrt(x.^2+y.^2);Z=sin(R)./R;surf(x,y,Z)figurecolormap(hot)surf(x,y,Z)3.三维表面图形的着色

三维表面图实际上就是在网格图的每一个网格片上涂上颜色。surf函数用缺省的着色方式对网格片着色。除此之外,还可以用shading命令来改变着色方式。shadingfaceted命令将每个网格片用其高度对应的颜色进行着色,但网格线仍保留着,其颜色是黑色。这是系统的缺省着色方式。shadingflat命令将每个网格片用同一个颜色进行着色,且网格线也用相应的颜色,从而使得图形表面显得更加光滑。

shadinginterp命令在网格片内采用颜色插值处理,得出的表面图显得最光滑。例1三种图形着色方式的效果展示。程序如下:[x,y,z]=sphere(20);%球面函数colormap(copper);%copper古铜调色图subplot(1,3,1);surf(x,y,z);axisequalsubplot(1,3,2);surf(x,y,z);shadingflat;axisequalsubplot(1,3,3);surf(x,y,z);shadinginterp;axisequal例2三种浓淡处理方式比较。clf x=-4:4;y=x;[X,Y]=meshgrid(x,y);Z=X.^2+Y.^2;surf(X,Y,Z)colormap(jet)subplot(1,3,1),surf(Z),axisoffsubplot(1,3,2),surf(Z),axisoff,shadingflatsubplot(1,3,3),surf(Z),axisoff,shadinginterpset(gcf,'Color','w')4.透明度控制alphaalpha(v)对面、块、象三种图形对象的透明度加以控制;0-1之间,0为完全透明,1为不透明。V的值越接近于0,透明度越高例3半透明的表面图。clfsurf(peaks)shadinginterpalpha(0.5)colormap(summer)2023/2/5figure;[X,Y,Z]=sphere;surf(X,Y,Z);colormap(lines);shadinginterpholdon;mesh(2*X,2*Y,2*Z)hiddenoff%显示被前面图形遮挡的后面部分axisequalaxisofffigure;surf(X,Y,Z,'FaceColor','r');holdon;surf(2*X,2*Y,2*Z);alpha(0.4)axisequalaxisoff

例4

三维图形的透视效果2023/2/55灯光设置light

MATLAB提供了灯光设置的函数,其调用格式为:light('Color',选项1,'Style',选项2,'Position',选项3)option1可以采用RGB三元组或相应的色彩字符;option2可以取’infinte’和‘local’分别表示无穷远光和近光。option3为直角坐标三元组形式,对远光,表示光线穿过该点射向原点;对近光,表示光源所在位置。例5光照处理后的球面。程序如下:[x,y,z]=sphere(20);subplot(1,2,1);surf(x,y,z);axisequal;light('Posi',[0,1,1]);shadinginterp;holdon;plot3(0,1,1,'p');text(0,1,1,'light');subplot(1,2,2);surf(x,y,z);axisequal;light('Posi',[1,0,1]);shadinginterp;holdon;plot3(1,0,1,'p');text(1,0,1,'light');2023/2/56.照明模式lighting函数,调用语法:lightingoptions

lightingflat,产生均匀光照,选择此方法,以查看面对象,是光照模式的默认设置。

lightinggouraud,计算顶点法线并作线性插值修改表面颜色,选择此方法,以查看曲面对象。

lightingphong,做线性插值并计算每个像素的反射率来修改表面颜色,选择此方法,以查看曲面对象。此方法比lightinggouraud的效果好,但是用于渲染的时间较长。

lightingnone,关掉照明。2023/2/57.图形表面对光照反射属性设置material函数调用语法:

materialoptions

materialshiny,使图形对象有相对较高的镜面反射,镜面光的颜色仅取决于光源颜色。

materialdull,使图形对象有更多的漫反射,反射光的颜色仅取决于光源颜色。

materialmetal,使图形对象有非常高的镜面反射和非常低的环境光及漫反射,反射光的颜色取决于光源颜色和图形表面的颜色。2023/2/5material([kakdks])material([kakdksn])material([kakdksnsc]),用ka、kd和ks分别设置图形对象的环境光、漫反射和镜面反射的强度,用镜面指数n控制镜面亮点的大小,用sc设置镜面颜色的反射系数。ka、kd、ks、n和sc均为标量,sc的取值介于0和1之间。

materialdefault,恢复ka、kd、ks、n和sc的默认值。例6灯光、照明、材质指令所表现的图形。clf;[X,Y,Z]=sphere(80);colormap(jet)subplot(1,2,1),surf(X,Y,Z),axisequaloff,shadinginterplight('position',[0-101.5],'style','infinite')lightingphongmaterialshinysubplot(1,2,2),surf(X,Y,Z,-Z),axisequaloff,shadingflatlight;lightingflatlight('position',[-1,-1,-2],'color','y')light('position',[-1,0.5,1],'style','local','color','w')set(gcf,'Color','w') 8、透视、镂空和裁切(1)图形的透视hiddenoff 透视被叠压的图形hiddenon 消隐被叠压的图形例7透视演[X0,Y0,Z0]=sphere(30); X=2*X0;Y=2*Y0;Z=2*Z0; surf(X0,Y0,Z0); shadinginterp holdon,mesh(X,Y,Z),colormap(hot) holdoff hiddenoff axisequal,axisoff

(2)图形的镂空例8演示:如何利用“非数”NaN,对图形进行镂空处理。

P=peaks(30); P(18:20,9:15)=NaN; surfc(P); colormap(hot)light('position',[50,-10,5])material([0.9,0.9,0.6,15,0.4])gridoff,boxon(3)图形的裁剪处理例9绘制三维曲面图,并进行插值着色处理,裁掉图中x和y都小于0部分。程序如下:[x,y]=meshgrid(-5:0.1:5);z=cos(x).*cos(y).*exp(-sqrt(x.^2+y.^2)/4);surf(x,y,z);shadinginterp;pause%程序暂停i=find(x<=0&y<=0);z1=z;z1(i)=NaN;surf(x,y,z1);shadinginterp;为了展示裁剪效果,第一个曲面绘制完成后暂停,然后显示裁剪后的曲面。

裁减前裁减后2023/2/510.调整视点位置view函数

view(az,el),设置三维绘图的视角,az是方位角,el表示相对于xoy平面的仰角。zyx-y视点az方位角el仰角2023/2/5

view([x,y,z]),设置视点的三维直角坐标[x,y,z].view(2),设置默认的二维视角,az=0,el=90.view(3),设置默认的三维视角,az=-37.5,el=30.view(ax,…),设置句柄值为ax的坐标系的视角。

[az,el]=view,返回当前方向角和仰角。view([x,y,z])笛卡尔坐标系下的视角,2023/2/5二、质点运动轨迹动画1.comet函数

调用格式:

comet(y)

显示质点绕着向量y的二维动画轨迹

comet(x,y)

显示质点绕着向量y与x的二维动画轨迹

comet(x,y,p)

用输入参数p定义轨迹尾巴线的长度

comet(axes_handle,...)

在句柄值为axes_handle的坐标系中显示动画2023/2/5>>t=linspace(0,10*pi,2000);x=t.*cos(t);y=t.*sin(t);comet(x,y);例2质点绕阿基米德螺线(极坐标方程为)运动的二维彗星运行轨迹动画。2023/2/5

调用格式:

comet3(z)

显示质点绕着向量z的三维动画轨迹

comet3(x,y,z)

显示质点绕着向量x、y与z的三维动画轨迹

comet(x,y,z,p)

用输入参数p定义轨迹尾巴线的长度

comet(axes_handle,...)

在句柄值为axes_handle的坐标系中显示动画2.comet3函数2023/2/5t=linspace(0,10*pi,1000);x=20*sin(t);y=20*cos(t);z=t;comet3(x,y,z)例3质点绕螺旋线运动的三维彗星运行轨迹动画。2023/2/5三、霓虹闪烁动画如今繁华大都市的夜色中,霓虹闪烁,煞是好看,调用MATLAB中的spinmap函数可以做出这种效果的动画,它是通过旋转颜色映像的方式来呈现这种霓虹闪烁的动画效果。2023/2/51.spinmap函数

调用格式:

spinmap,旋转颜色映像约5秒钟;

spinmap(t),旋转颜色映像约t秒钟,具体时间取决于硬件;

spinmap(t,inc),旋转颜色映像约t秒钟,并设置增量参数inc,该参数用来调整闪烁频率;

spinmap(‘inf’),不限时旋转颜色映像,若需终止,请按Ctrl+C键。2023/2/5sphere;axisequal;axisoff;spinmap(20,1);

例4霓虹闪烁的球体。2023/2/5

四、电影动画所谓的电影动画是指先把一帧帧图片保存起来,然后再像放电影一样把它们按次序播放出来。MATLAB中提供了getframe函数和movie函数,用来制作电影动画。其中getframe函数用来抓取图形对象作为电影的帧,movie函数用来播放电影动画。2023/2/51.getframe函数

调用格式:

getframe

返回一个电影帧,它是当前坐标系或图形窗口的快照

F=getframe

抓取当前坐标系作为一帧

F=getframe(h)

抓取句柄值为h的图形对象作为一个电影帧

F=getframe(h,rect)

抓取句柄值为h的图形对象的指定区域作为一个电影帧,rect是形如[左边距,下边距,宽度,高度]的向量,用来设定抓取区域2023/2/52.movie函数

调用格式:

movie(M)

在当前坐标系中只播放一次由矩阵M所保存的电影

movie(M,n)

播放n次,若n为负数,则倒着循环播放,若n为向量,第一个元素为播放次数,后续元素为帧序号

movie(M,n,fps)

每秒播放fps帧,播放n次,默认每秒12帧2023/2/5movie(h,...)

在句柄值为h的图形窗口或坐标系中播放电影

movie(h,M,n,fps,loc)

在句柄值为h的图形窗口或坐标系的指定位置播放电影。M,n,fps的说明同上。loc是4个元素的向量[xy00],x和y用来设定帧的左下角在图形窗口或坐标系的位置,单位为像素2023/2/5x=linspace(-2,2,100);[X,Y,Z]=meshgrid(x,x,x);V=(X.^2+9/4*Y.^2+Z.^2-1).^3-X.^2.*Z.^3-9/80*Y.^2.*Z.^3;p=patch(isosurface(X,Y,Z,V,0));set(p,'FaceColor','red','EdgeColor','none');view(3);axisequal;axisoff;light('Posi',[0-23]);lightingphongset(gca,'nextplot','replacechildren');XX=get(p,'XData');YY=get(p,'YData');ZZ=get(p,'ZData');forj=1:20bili=sin(pi*j/20);set(p,'XData',bili*XX,'YData',bili*YY,'ZData',bili*ZZ)F(j)=getframe;

endmovie(F,10)

例5一颗跳动的红心。2023/2/5五、录制AVI格式视频动画MATLAB中提供了avifile函数,用来把getframe函数抓取的电影帧录制为AVI格式视频动画。利用MATLAB录制AVI格式视频动画的步骤依次如下:调用avifile函数先创建一个空白的avifile文件。绘制视频的每一个帧所对应的图形。调用getframe函数抓取当前图形窗口或坐标系中的图片。调用addframe函数把抓取的图片添加到avifile文件中。调用close函数关闭avifile文件。2023/2/5六、GIF动画

在浏览网页的时候,我们会看到好多很炫的动画,它们大多都是G

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论