怎么用matlab画国旗,Matlab考试攻略_国旗题_1.如何用Matlab画法国国旗?
人生最終的價值在于覺醒和思考的能力。 —— 亞里士多德一直以來,傳道、授業、解惑是教師最顯著的標志。教師的功能就是把人類已有的知識經驗傳授給年輕一代,使其在較高的起點上發展。因此,教師作為知識的傳授者不僅要有精深的學科知識,而且還必須懂得如何傳授知識,是學科知識和學科教學法的雙重專家。
由于科學技術的高速發展,多媒體和網絡技術的運用拓展了人們獲取知識的途徑,教師作為唯一信息源的作用日趨減少。教師不能再把單純的知識傳遞作為教學的主要任務,而應該把學生形成正確的學習態度、方法以及靈活的知識"遷移"能力作為教學的主要任務,擔當起學習的促進者的角色。教師應該幫助學生覺醒,引發學生思考,促進學生快速成長,把學生打造成為可持續發展的個體。
那么,如何運用“遷移”來提高學生在新情境中的問題解決能力?
先提供給學生一個學習材料,讓學生建立起"交叉火力"的概念,效果如下圖所示。
在軍事行動中,交叉火力(Crossfire)指交戰一方隊員之間的火力線,兩個或者多個火力單位射在陣地上,并不是朝正面射擊,而是左側單位朝右射擊,右側單位朝左射擊,這樣就會出現火力的交叉。
然后讓學生解決一個新情境下的問題:
通過γ射線可以對病人體內的病灶進行損傷手術,但是這樣從一個方向射進來的時候,也會對照射到的正常組織造成損傷,該如何解決這個問題呢?
這個問題的解決需要將之前的“交叉火力”概念遷移到新的利用射線手術的新情境中,答案在下圖中不言自明。
這個部分是用來致敬YH老師的,在本科一年級,就在普通心理學課上給我們講解新情境的問題解決,從此愛上了這個地方——魔法心理學院!
布魯納認為,某個學科的基本知識結構和學習態度/方法的掌握,不僅便于學生對教學內容的理解和記憶,而且還有利于學習遷移的發生。他強調,為了便于學生獲得知識和技能,要注意兩點:(1)教材呈現的順序要注意從一般到個別的不斷分化;(2)教材的知識結構要從已知到未知逐步系統化。
布魯納鼓勵的是一種探索新情境下問題解決的能力和態度/方法。比知識本身更具有價值的是更接近本質的概念/原理和get知識的態度/方法。
Matlab考試的時候,之所以選擇各國的國旗作為考試主題之一,是因為:(1)國旗題的可擴展性很好,國旗種類繁多,五花八門,具備從一般到個別的不斷分化,和構建從已知到未知的可能;
(2)它可以幫助學生更好地掌握畫圖和矩陣操作。這一開始的設定,主要是畫帶長條的國旗,比如法國。
法國國旗呈長方形,寬(Width)和高(Height)之比為3∶2。旗面由三個平行且相等的豎長方形構成,從左到右分別是藍色、白色和紅色三色。藍色是圣馬丁長袍的顏色,代表自由;白色是為了紀念民族英雄圣女貞德,代表平等;以及紅色源自圣但尼軍旗,代表博愛。
法國國旗最早出現在1789年的法國資產階級革命時期(法國大革命時期),巴黎國民自衛隊就以藍、白、紅三色旗為隊旗。1794年2月15日,旗幟最終被確定為法蘭西第一共和國的國旗。
[1] 圖形窗口機制可以簡單的用一個圖來概括:
Root代表屏幕,Figure代表圖形窗口,Axes是坐標軸。我們一般會先創建好圖形窗口和坐標軸,然后選擇在內存中把圖Image的矩陣Matrix準備好之后,再用imshow函數畫到坐標軸上。
% 清空
clc; clear;
% Root是默認的,所以不需要管它。我們直接來創建一個圖形窗口:
hFigure = figure(1); % 這里的1是圖形窗口的標識id,也可以創建圖形窗口2,3,4 ... N;
%這里的100 的意思是,以屏幕左下角為原點確定的x=100和y=100的位置;
% 坐標軸
hAxes = axes('parent',hFigure); %當坐標軸來到這個世界,首先要確定好它的父對象是誰;
set(hAxes, 'units','pixels', 'position',[0 0 600 400]); % 然后再設置它的屬性;% 為什么一開始要先設置 'units'屬性呢?是因為坐標軸默認的是 normalized或者character,normalized是比例,按照比例來寫應該是 [0 0 1 1],或者是 character,這個是參考字符x設定的單位。這兩者操作起來都不如pixels像素來得直觀、方便和精確,所以一般這里要把'units'屬性改成'pixels'。位置屬性,設置成 [0 0 600 400]代表的意思是,以圖形窗口的左下位置為原點,寬是600,高是400。
[2] 矩陣知識主要涉及到矩陣的創建和行列的賦值:
賦值涉及到一個行列的元素標識的方法,第一個參數是行,如果填寫 : (左邊有一個冒號)代表的是所有的行;第二個參數是列,如果填寫1:200代表從第1列到第200列。
% 圖形矩陣
imgMatrix(:,1:200,1) = 0; % R == 0
imgMatrix(:,1:200,2) = 0; % G == 0
imgMatrix(:,1:200,3) = 1; % B == 1 這樣設定就是藍色
imgMatrix(:,201:400,1) = 1; % R == 1
imgMatrix(:,201:400,2) = 1; % G == 1
imgMatrix(:,201:400,3) = 1; % B == 1 白色
imgMatrix(:,401:600,1) = 1; % R == 1
imgMatrix(:,401:600,2) = 0; % G == 0
imgMatrix(:,401:600,3) = 0; % B == 0 紅色
% 把準備好的圖畫矩陣畫到坐標軸上
imshow(imgMatrix, 'parent', hAxes);
在答疑的時候,我會讓我的某個學生畫法國國旗,并且把代碼發到QQ群里邊,并且故意會問,考試的時候會考什么國旗?
出題必須有跡可循,這個是原則!
有的學生也許已經猜到了,考試的時候,也會畫帶長條的國家的國旗,比如,德國(德國和法國這對冤家),芬蘭(一個特別神奇的國家,在教育方面奉行尊重教師的個性和創新),和荷蘭(對生意中的契約的尊崇達到了極其偏執的境界)等。不管是哪個國家的國旗,內容雖然變了,但是考察的核心知識點仍然集中在(1)圖形窗口畫圖 + (2)矩陣行列操作。
比如,我們考試的時候,出了德國國旗的題目,該如何解答?
德國國旗呈長方形,長寬之比為5:3。旗面自上而下由黑、紅、金三個平行相等的橫長方形組成。黑紅金為德意志民族所喜愛的顏色。
% 清空
clc; clear;
% 圖形窗口
hFigure = figure(1);
set(hFigure, 'position', [100 100 600 400]);
% 坐標軸
hAxes = axes('parent',hFigure);
set(hAxes, 'units','pixels', 'position',[0 0 500 300]); %相比法國國旗,寬和高有改動500*300
% 圖形矩陣
imgMatrix = zeros(300,500,3); %相比法國國旗,行和列數有改動 300行 500列
imgMatrix(1:100,:,1) = 0; % R == 0
imgMatrix(1:100,:,2) = 0; % G == 0
imgMatrix(1:100,:,3) = 0; % B == 1 這樣設定就是黑色
imgMatrix(101:200,:,1) = 1; % R == 1
imgMatrix(101:200,:,2) = 1; % G == 0
imgMatrix(101:200,:,3) = 1; % B == 0 紅色
imgMatrix(201:300,:,1) = 1; % R == 1
imgMatrix(201:300,:,2) = 0.8; % G == 0.8
imgMatrix(201:300,:,3) = 0; % B == 0 金色
% 把準備好的圖畫矩陣畫到坐標軸上
imshow(imgMatrix, 'parent', hAxes);
如果就這樣,把顏色改一改,矩陣操作從豎條(對列進行操作)改成橫條(對行進行操作),也未免太過簡單了。所以,通常這樣的變化里邊,還會增加一個知識點,就是如何對圖片進行保存。這個知識點又分為3個小步驟:
(a)給當前圖形窗口截屏用的是getframe函數,參數可以是gcf,也可以是gca;
(b)獲取其中的圖畫矩陣,我們需要借助截屏生成的結構體中的.cdata變量;
(c)保存圖片我們用的是 imwrite函數,參數是圖畫矩陣,保存圖片的路徑,和保存的格式。
% 給當前圖形窗口拍個快照
hFrame = getframe(gcf); %這里的gcf是get current figure的意思,也就是獲取當前的圖形窗口句柄;gca是get current axes的意思,也就是獲取當前的坐標軸的句柄的意思。由于坐標軸的大小撐開跟圖形窗口的大小是一樣的,所以這里getframe不管是對gcf拍照截圖還是對gca拍照截圖,結果都是一樣的。這么說又是有一小點問題的,因為有的時候截圖會出現白邊,我印象中,要想把白邊去掉,圖形窗口的寬和高可以設置的比坐標軸大一些,然后getframe()函數的參數填寫gca就可能能解決這個白邊的問題。
這里得到的hFrame你可以從Matlab命令窗口雙擊看下,它是一個結構體變量,包含兩個部分,一個是hFrame.cdata,另外一個是hFrame.colormap。我們要的圖片矩陣是前者。
% 獲取當前窗口的圖片矩陣
% 獲取當前窗口的圖片矩陣
imgFrame = hFrame.cdata;
% 保存圖片矩陣
imwrite(imgFrame, 'GermanyFlag.jpg', 'jpg');
我們來看最后畫出來的效果:)
------
歡迎大家訪問Matlab初學者教程_目錄_開天辟地:
http://www.oiegg.com/viewthread.php?tid=1903181&page=1&extra=page%3D1%26amp%3Bfilter%3Ddigest#pid18968323
[本帖最后由 psybestwish 于 2017-7-6 08:02 編輯]
總結
以上是生活随笔為你收集整理的怎么用matlab画国旗,Matlab考试攻略_国旗题_1.如何用Matlab画法国国旗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 调用后台方法 ajax,JS直接调
- 下一篇: JS实现一个打点计时器