《固体物理学》中基于Matlab的动态晶面标示.docVIP

《固体物理学》中基于Matlab的动态晶面标示.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《固体物理学》中基于Matlab的动态晶面标示.doc

《固体物理学》中基于Matlab的动态晶面标示   摘要:《固体物理学》的纸质教材中,一般只给出一些典型的晶面,且观察视图的角度是固定的。本文利用Matlab的图形显示功能,通过开发Matlab源程序,不但可实时显示任意设定的晶面,而且能对视图做三维旋转,从不同角度来观察晶面,增加了课程教学的生动性、直观性和交互性。   关键词:固体物理;晶面;Matlab   中图分类号:G642.3 文献标志码:A 文章编号:1674-9324(2017)16-0213-02   固体物理学是研究固体的结构及由结构决定的固体的热学、电学、光学和磁学等性质并阐明其用途的一门科学[1],其中的固体指的是晶体,而晶体最基本的性质是微观周期性。由于晶体的微观周期性决定了固体材料性质的各向异性,体现为在不同的晶面上或沿不同的晶向材料的性质不同。为了区分不同的晶向或晶面,可用晶向指数或晶面指数来标示[2],其中晶面的标示不但是《固体物理学》教学的重点,也是课程教学中的难点。然而,在传统的纸质教材中,由于其自身的限制只能给出一些特殊的晶面,不可能罗列所有的晶面,且晶面显示的角度是固定的。即使利用3DS MAX[3]、Rasmol[4]或VRML语言[5]等开发的模形也不能实现实时交互功能。为此,本文充分发挥计算机的动态显示优势,通过Matlab语言编写程序,只要输入任意的晶面的指数即可实时地显示需标示的晶面,同时利用软件的三维旋转功能可从不同角度来动态观察。实践表明,该方法在教学中具有实时、动态、精确和可视化的优点。   一、晶面的标示方法   固体物理学中,晶面用三个互质的整数h,k和l加圆括号来标示,即(hkl)[1]。需要说明的是,(hkl)表示一族平行的晶面而不是某一个晶面。由于晶体的周期性,平行晶面族中各晶面的性质是等价的,因此通常只需在原胞或晶胞中画出距原点最近的一个面即可。以立方晶系为例,图1(a)在晶胞中画出了(hkl)面,该面与三个晶轴a,b和c的截距分别为1/h,1/k和1/l,即可用顶点坐标分别为(1/h,0,0),(0,1/k,0)和(0,0,1/l)的三角形来图示。在实际中有以下几种特殊情形需注意:   1.当h,k和l中有一项为零时,其倒数为无究大,表示晶面与对应的晶轴平行无交点,这时的晶面需用平行四边形来表示。例如,(0kl)面与a轴平行,如图1(b)所示,平行四边形的四个项点坐标分别是:(0,1/k,0),(1,1/k,0),(0,0,1/l)和(1,0,1/l)。   2.当h,k和l中有两项为零时,表示晶面与两个对应的晶轴平行无交点,这时的晶面同样需用平行四边形来表示。例如(0k0)面与a轴和c轴平行,如图1(c)所示,平行四边形的四个项点坐标分别是:(0,1/k,0),(1,1/k,0),(1,1/k,1)和(0,1/k,1)。   3.当h,k或l取负值时,晶面与对应轴的截距在轴的负方向,为了将晶面标示在晶胞内而不是晶胞外,需进行一个单位的平移。例如(hkl)面与a,b和c轴的截距分别为1/h,-1/k和1/l,如图1(d)所示,为了将其在晶胞内表示,晶面的三个顶点坐标分别为:(1/h,1,0),(1,1-1/k,0)和(0,1,1/l)。   二、晶面动态标示的Matlab实现   对于设定的面指数,用Matlab语言进行动态标示的具体过程说明如下。   1.画立方晶胞。(1)用8行3列的二维矩阵p(8,3)设定立方晶胞8个顶点的三维坐标,其中每一行与一个顶点对应,3列数值分别对应各顶点在a,b,c轴上的投影。(2)用8个顶点构建表示立方晶胞12条边的三维数组line(2,3,12)。以第i条边为例,line(2,3,i)是一个2行3列的二维矩阵,其第一行与边的起点坐标对应,第二行与边的终点坐标对应。(3)根据三维数组line(2,3,12),利用Matlab的三维画线函数plot3绘制立方晶胞。(4)标注原点、晶轴及图题等。   2.标示晶面。(1)根据给定的晶面指数,确定标示在晶胞中的晶面顶点坐标。判断h,k和l中是否有零值来决定晶面是平行四边形还是三角形,并确定各顶点坐标。各顶点在a,b和c轴上的投影分别存放在一维列矩阵X,Y和Z中。(2)根据给定的晶面指数,判断h,k和l中是否有负值,如有负值,则应将晶面平移一个晶格常数,以便在晶胞中显示。如果h0,则列阵X中的所有单元应加1,同理,如果k0,则Y中的所有单元应加1,如果l0,则Z中的所有单元应加1。(3)标示晶面。根据矩阵X,Y和Z中晶面顶点的坐标值,利用Matlab的fill3函数绘制晶面,并进行透明设置和开启鼠标3维旋转功能。   三、应用实例   图2给出了用Matlab显示的(100)、(110)和(2■1)面的截

您可能关注的文档

文档评论(0)

heroliuguan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8073070133000003

1亿VIP精品文档

相关文档