第七講 圖形修飾_第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

提交評論