標籤:

大表姐說:得旌旗者得天下(matlab畫圖機制)

當今世界,大佬們開戰,往往將自己的旗幟插到敵方領地,宣示勝利和主權。

為什麼國旗有如此之大的魔力?咱們得從第一面國旗誕生的淵源說起:

世界上最古老的國旗是丹麥的紅底白十字旗,據說,公元1219年,丹麥國王率軍向愛沙尼亞的異教徒開戰,雙方僵持不下。

6月15日的這一天,突然,天上飄來一面帶有白色十字的紅旗,並且伴隨著一個響亮的聲音:「得旌旗者得天下!」丹麥軍隊士氣大振,贏得勝利。

因此,白色十字紅旗就成為了丹麥王國的國旗,至今每年6月15日,丹麥國民都要慶祝「國旗日」!

為了紀念人類史上這個偉大的事件,咱們現在就用matlab來畫出丹麥國旗:

一條神奇的分界線


熟悉matlab 操作界面

1. 代碼保存的文件夾

在電腦中選擇保存matlab代碼的文件夾,複製文件夾路徑

我一般把代碼保存在電腦G盤下的games文件夾下,路徑為 G:games

(注意:matlab可能存在對中文字元不兼容的情況,所以文件夾的命名最好是英文)

打開matlab,在主頁中的工作路徑下粘貼複製好的路徑,按Enter鍵

2. 新建腳本

點擊主頁上的「新建腳本」按鈕

彈出一個編輯器窗口,如下所示:

(注意,此時的編輯器窗口最左上角地方的名稱為「Untitled」)

首先起名字,此例是畫丹麥國旗,所以我將它命名 drawDannebrogFlag.m

複製名稱「drawDannebrogFlag.m」,然後點擊保存按鈕

彈出代碼保存的文件窗口

保存之後注意,編輯器左上角的名稱變為 G:gamesdrawDannebrogFlag.m,如下圖所示:


廢話不多說,直接上代碼

就這樣,一張丹麥國旗就畫好啦~

上面大表姐直接用matlab畫出了丹麥國旗。現在,咱們展開講matlab的可視化:

matlab可視化分為二維(平面)和三維(立體)兩種,今天主要說二維可視化。

其實,matlab畫圖很簡單,跟繪畫是一個流程,首先,支好畫架(如同電腦屏幕),再擱置好一張畫板(如同figure),在畫板上張貼好畫布(如同axes),所以我們繪製圖形其實是在axes區域,figure只是圖形呈現的窗口。

以下介紹matlab可視化的結構圖,也就是matlab到底能畫出些啥來。

咱們今天主要說Root——Figure——Axes——Image這一條線:

Root:是根對象,在這裡看做計算機屏幕,也就是畫架,固定好就不能隨意改變。

Figure:圖形窗口,也就是畫板,大小、擺放都可以自己選擇。

Axes:坐標軸,也就是畫布,圖形繪製區域,可自由發揮度最高。

至於UI對象,即用戶界面,可以實現人與計算機的交互作用,說人話就是你想讓計算機幹嘛它就幹嘛,這是一個很酷的功能,大表姐先賣個關子,下次再說。

還有UImenu,就是界面菜單,通過它可以設置figure窗口的菜單目錄,起到點綴化作用。

1. figure呈現圖形的窗口

呈現圖形窗口的三種方式

(1)建立圖形句柄,set設置屬性

(2)用figure函數建立圖形窗口

(3)figure set(gcf,...)

在這裡,我們需要了解「圖形句柄」,圖形句柄是指向圖形的一個變數,可以通過設置這個變數來改變圖形的屬性,外觀和顯示特點等。圖形句柄和圖形是捆綁在一起的。

附註:圖形窗口常用的屬性:position,color等

figure(屬性名稱1,屬性值1,屬性名稱2,屬性值2,……)

set(圖形句柄,屬性名稱1,屬性值1,屬性名稱2,屬性值2,……)

2. axes 繪製圖形的區域

與上述圖形窗口對應,坐標軸的建立也有三種方法:

(1)建立坐標軸,將圖形窗口認作父對象,set設置屬性

(2)用axes函數建立圖形窗口

(3)axes set(gca,...)

附註:坐標軸常用的屬性:units,position,Xlabel,Ylabel等。

axes(屬性名稱1,屬性值1,屬性名稱2,屬性值2,……)

set(坐標軸句柄,屬性名稱1,屬性值1,屬性名稱2,屬性值2,……)

3. image


數字圖像:採用等距矩形網格抽樣,以數字形式處理和存儲的二維矩陣。

簡而言之,就是有M×N個小格子,給每個小格子填充不同的顏色,形成圖像。

圖像中顏色存儲,主要有二值圖像、灰度圖像、索引圖像、真彩色RGB圖像,咱們主要介紹RGB圖像。

RGB圖像簡而言之就是,有M×N矩陣,每一個矩陣中放一個R、G、B三個值組合生成的像素。

所以,matlab中顏色設置為M×N×3,通過M×N可以精確定位到需要上色的某個區域,3表示RGB組合後的值,因此,相當於每一個網格中要分別設置R、G、B三個值。

如上圖所示,丹麥國旗可通過繪製三個區塊完成,每個區域中需要設置三個R、G、B值來實現顏色呈現。

這樣,我們可以通過M×N的定位來實現在不同的區域繪圖,填充的顏色通過RGB三個值的組合實現,我們就可以想畫什麼就畫什麼啦~

4. 圖像的顯示和保存

通過函數imshow呈現圖片;函數imwrite保存圖片

大表姐終於寫完了教程(裝完B),伸懶腰~

回顧:今天大表姐說了幾個函數:figure,axes,set,imshow,imwrite;以及構建圖像顏色矩陣M×N×3。

哼~大表姐早就知道你們不是真心來看大表姐的~

現在附上原始代碼:

% filename is:: drawDannebrogFlag.m%clearclc;clear;close all;%working pathCWPath = fileparts(mfilename(fullpath));%設置圖形窗口,在此用position固定圖形窗口位置 (丹麥國旗長寬比為37:28)hFigure = figure(1);set (hFigure, position, [0 0 370 280]);%設置繪製圖形的坐標軸區域hAxes = axes(parent, hFigure);set(hAxes, units, pixels, position,[0 0 370 280]);% 丹麥國旗為紅底白十字圖案,可以分為三個部分繪製完成imgMatrix = ones(280,370,3); %設置白底imgMatrix(1:120,:,1) = 198/255; %將圖片上半部分塗成紅色,通過設置RGB值實現imgMatrix(1:120,:,2) = 12/255;imgMatrix(1:120,:,3) = 48/255; imgMatrix(161:280,:,1) = 198/255; %將圖片下半部分塗成紅色,通過設置RGB值實現imgMatrix(161:280,:,2) = 12/255;imgMatrix(161:280,:,3) = 48/255; %注意橫向坐標軸120到161之間有間隔部分未塗色imgMatrix(:,121:160,1) = 1; %將圖片靠左縱向坐標軸為121到160部分塗成白色imgMatrix(:,121:160,2) = 1;imgMatrix(:,121:160,3) = 1;% 將繪製好的圖片呈現在坐標軸上 imshow(imgMatrix, parent,hAxes);% 將繪製好的圖片保存在工作文件夾下,名稱為DannebrogFlag.jpg,保存格式為『jpg』imwrite(imgMatrix, DannebrogFlag.jpg,jpg);

餘下的一周里,大表姐就這樣靜靜地看著你~

(如果你在其他場合你聽見大表姐說啥,一定不要上當,那只是一隻冒充大表姐的AI在說人話)

蔣老師說了,matlab課程中畫國旗是必考題,大表姐就只能幫你們到這裡~


推薦閱讀:

零基礎學matlab,需要哪些基礎知識?
想用別人的實驗來算東西,但沒有他的數據,只有文獻里的圖線怎麼辦?
MATLAB 高級數據結構連載 3:金融時間序列Financial Time Series (Part C) 跟蹤股票賬戶權益的變動
MATLAB圖像處理中的小波變換
如何快速重寫一份你不了解 組織較差的代碼?(算是代碼整理吧)

TAG:MATLAB |