李建軍
摘要:《固體物理學(xué)》的紙質(zhì)教材中,一般只給出一些典型的晶面,且觀察視圖的角度是固定的。本文利用Matlab的圖形顯示功能,通過開發(fā)Matlab源程序,不但可實(shí)時(shí)顯示任意設(shè)定的晶面,而且能對視圖做三維旋轉(zhuǎn),從不同角度來觀察晶面,增加了課程教學(xué)的生動(dòng)性、直觀性和交互性。
關(guān)鍵詞:固體物理;晶面;Matlab
中圖分類號:G642.3 文獻(xiàn)標(biāo)志碼:A 文章編號:1674-9324(2017)16-0213-02
固體物理學(xué)是研究固體的結(jié)構(gòu)及由結(jié)構(gòu)決定的固體的熱學(xué)、電學(xué)、光學(xué)和磁學(xué)等性質(zhì)并闡明其用途的一門科學(xué)[1],其中的固體指的是晶體,而晶體最基本的性質(zhì)是微觀周期性。由于晶體的微觀周期性決定了固體材料性質(zhì)的各向異性,體現(xiàn)為在不同的晶面上或沿不同的晶向材料的性質(zhì)不同。為了區(qū)分不同的晶向或晶面,可用晶向指數(shù)或晶面指數(shù)來標(biāo)示[2],其中晶面的標(biāo)示不但是《固體物理學(xué)》教學(xué)的重點(diǎn),也是課程教學(xué)中的難點(diǎn)。然而,在傳統(tǒng)的紙質(zhì)教材中,由于其自身的限制只能給出一些特殊的晶面,不可能羅列所有的晶面,且晶面顯示的角度是固定的。即使利用3DS MAX[3]、Rasmol[4]或VRML語言[5]等開發(fā)的模形也不能實(shí)現(xiàn)實(shí)時(shí)交互功能。為此,本文充分發(fā)揮計(jì)算機(jī)的動(dòng)態(tài)顯示優(yōu)勢,通過Matlab語言編寫程序,只要輸入任意的晶面的指數(shù)即可實(shí)時(shí)地顯示需標(biāo)示的晶面,同時(shí)利用軟件的三維旋轉(zhuǎn)功能可從不同角度來動(dòng)態(tài)觀察。實(shí)踐表明,該方法在教學(xué)中具有實(shí)時(shí)、動(dòng)態(tài)、精確和可視化的優(yōu)點(diǎn)。
一、晶面的標(biāo)示方法
固體物理學(xué)中,晶面用三個(gè)互質(zhì)的整數(shù)h,k和l加圓括號來標(biāo)示,即(hkl)[1]。需要說明的是,(hkl)表示一族平行的晶面而不是某一個(gè)晶面。由于晶體的周期性,平行晶面族中各晶面的性質(zhì)是等價(jià)的,因此通常只需在原胞或晶胞中畫出距原點(diǎn)最近的一個(gè)面即可。以立方晶系為例,圖1(a)在晶胞中畫出了(hkl)面,該面與三個(gè)晶軸a,b和c的截距分別為1/h,1/k和1/l,即可用頂點(diǎn)坐標(biāo)分別為(1/h,0,0),(0,1/k,0)和(0,0,1/l)的三角形來圖示。在實(shí)際中有以下幾種特殊情形需注意:
1.當(dāng)h,k和l中有一項(xiàng)為零時(shí),其倒數(shù)為無究大,表示晶面與對應(yīng)的晶軸平行無交點(diǎn),這時(shí)的晶面需用平行四邊形來表示。例如,(0kl)面與a軸平行,如圖1(b)所示,平行四邊形的四個(gè)項(xiàng)點(diǎn)坐標(biāo)分別是:(0,1/k,0),(1,1/k,0),(0,0,1/l)和(1,0,1/l)。
2.當(dāng)h,k和l中有兩項(xiàng)為零時(shí),表示晶面與兩個(gè)對應(yīng)的晶軸平行無交點(diǎn),這時(shí)的晶面同樣需用平行四邊形來表示。例如(0k0)面與a軸和c軸平行,如圖1(c)所示,平行四邊形的四個(gè)項(xiàng)點(diǎn)坐標(biāo)分別是:(0,1/k,0),(1,1/k,0),(1,1/k,1)和(0,1/k,1)。
3.當(dāng)h,k或l取負(fù)值時(shí),晶面與對應(yīng)軸的截距在軸的負(fù)方向,為了將晶面標(biāo)示在晶胞內(nèi)而不是晶胞外,需進(jìn)行一個(gè)單位的平移。例如(hkl)面與a,b和c軸的截距分別為1/h,-1/k和1/l,如圖1(d)所示,為了將其在晶胞內(nèi)表示,晶面的三個(gè)頂點(diǎn)坐標(biāo)分別為:(1/h,1,0),(1,1-1/k,0)和(0,1,1/l)。
二、晶面動(dòng)態(tài)標(biāo)示的Matlab實(shí)現(xiàn)
對于設(shè)定的面指數(shù),用Matlab語言進(jìn)行動(dòng)態(tài)標(biāo)示的具體過程說明如下。
1.畫立方晶胞。(1)用8行3列的二維矩陣p(8,3)設(shè)定立方晶胞8個(gè)頂點(diǎn)的三維坐標(biāo),其中每一行與一個(gè)頂點(diǎn)對應(yīng),3列數(shù)值分別對應(yīng)各頂點(diǎn)在a,b,c軸上的投影。(2)用8個(gè)頂點(diǎn)構(gòu)建表示立方晶胞12條邊的三維數(shù)組line(2,3,12)。以第i條邊為例,line(2,3,i)是一個(gè)2行3列的二維矩陣,其第一行與邊的起點(diǎn)坐標(biāo)對應(yīng),第二行與邊的終點(diǎn)坐標(biāo)對應(yīng)。(3)根據(jù)三維數(shù)組line(2,3,12),利用Matlab的三維畫線函數(shù)plot3繪制立方晶胞。(4)標(biāo)注原點(diǎn)、晶軸及圖題等。
2.標(biāo)示晶面。(1)根據(jù)給定的晶面指數(shù),確定標(biāo)示在晶胞中的晶面頂點(diǎn)坐標(biāo)。判斷h,k和l中是否有零值來決定晶面是平行四邊形還是三角形,并確定各頂點(diǎn)坐標(biāo)。各頂點(diǎn)在a,b和c軸上的投影分別存放在一維列矩陣X,Y和Z中。(2)根據(jù)給定的晶面指數(shù),判斷h,k和l中是否有負(fù)值,如有負(fù)值,則應(yīng)將晶面平移一個(gè)晶格常數(shù),以便在晶胞中顯示。如果h<0,則列陣X中的所有單元應(yīng)加1,同理,如果k<0,則Y中的所有單元應(yīng)加1,如果l<0,則Z中的所有單元應(yīng)加1。(3)標(biāo)示晶面。根據(jù)矩陣X,Y和Z中晶面頂點(diǎn)的坐標(biāo)值,利用Matlab的fill3函數(shù)繪制晶面,并進(jìn)行透明設(shè)置和開啟鼠標(biāo)3維旋轉(zhuǎn)功能。
三、應(yīng)用實(shí)例
圖2給出了用Matlab顯示的(100)、(110)和(2■1)面的截圖結(jié)果。在Matlab環(huán)境下,可以利用鼠標(biāo)的左鍵旋轉(zhuǎn)視圖,從不同方向觀察晶面。
四、結(jié)語
對于大部分本科生來說,《固體物理學(xué)》是一門枯燥且抽象的課程,如何將深?yuàn)W的理論教學(xué)與現(xiàn)代多媒體教育手段有效結(jié)合,激發(fā)學(xué)生的學(xué)習(xí)興趣,是值得思考的問題。本文基于Matlab語言,充分發(fā)揮計(jì)算機(jī)多媒體教學(xué)的優(yōu)勢,可實(shí)時(shí)動(dòng)態(tài)地顯示任意設(shè)定的晶面,增加了課程教學(xué)的生動(dòng)性、直觀性和交互性。希望能對相關(guān)理論課程的教學(xué)有一定的啟迪作用。
參考文獻(xiàn):
[1]方俊鑫,陸棟.固體物理學(xué)(上冊)[M].上海:上海科學(xué)技術(shù)出版社,1980.
[2]黃昆.固體物理學(xué)[M].北京:高等教育出版社,1988.
[3]章天金,馬志軍,江娟,潘瑞琨.三維動(dòng)畫技術(shù)在固體物理學(xué)教學(xué)中的應(yīng)用[J].沈陽師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2007,25(4):454-456.
[4]顧燕紅,黃曉江.用RasMol軟件制作晶體結(jié)構(gòu)的課件[J].物理與工程,2006,16(3):33-34.
[5]孟祥東,華中.VRML語言及在固體物理教學(xué)中的應(yīng)用[J].吉林師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2004,(2):40-42.