matlab學習筆記9 高級繪圖命令_2 圖形的高級控制_視點控制和圖形旋轉_色圖和顏色映像_光照和着色

一起來學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

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章