案例1 绘制金刚石图案算法
绘制金刚石实验报告

附页实验内容、方法和步骤(1)新建一个MFC工程test(2)编写金刚石绘制函数(3)运行调试及结果截图:源代码:#include "stdafx.h"#include "test.h"#include "testDoc.h"#include "testView.h"#include <math.h>#define PI 3.1415926#define ROUND(a) int(a+0.5)#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif// CTestViewIMPLEMENT_DYNCREATE(CTestView, CView)BEGIN_MESSAGE_MAP(CTestView, CView)ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP()// CTestView construction/destructionCTestView::CTestView(){}CTestView::~CTestView(){}BOOL CTestView::PreCreateWindow(CREATESTRUCT& cs)return CView::PreCreateWindow(cs);}// CTestView drawingvoid CTestView::OnDraw(CDC* pDC){CTestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);CRect rect;GetClientRect(&rect);pDC->SetMapMode(MM_ANISOTROPIC);pDC->SetWindowExt(rect.Width(),rect.Height());pDC->SetViewportExt(rect.Width(),-rect.Height());pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);CPen NewPen,*pOldPen;NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255));pOldPen=pDC->SelectObject(&NewPen);double thta;int n=20,r=150;CPoint p[20];thta=2*PI/n;for(int i=0;i<n;i++){p[i].x=(long)(r*cos(i*thta));p[i].y=(long)(r*sin(i*thta));}for(i=0;i<=n-2;i++){for(int j=i+1;j<=n-1;j++){pDC->MoveTo(ROUND(p[i].x),ROUND(p[i].y));pDC->LineTo(ROUND(p[j].x),ROUND(p[j].y));}}pDC->SelectObject(pOldPen);NewPen.DeleteObject();ReleaseDC(pDC);}// CTestView printingBOOL CTestView::OnPreparePrinting(CPrintInfo* pInfo){// default preparationreturn DoPreparePrinting(pInfo);}void CTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {void CTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){}// CTestView diagnostics#ifdef _DEBUGvoid CTestView::AssertValid() const{CView::AssertValid();}void CTestView::Dump(CDumpContext& dc) const{CView::Dump(dc);}CTestDoc* CTestView::GetDocument() // non-debug version is inline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestDoc)));return (CTestDoc*)m_pDocument;}#endif //_DEBUG// CTestView message handlers。
金刚石结构的Geogebra可视化模拟

金刚石结构的Geogebra可视化模拟作者:陈宝儿来源:《中学理科园地》2020年第05期摘要:本文借助GeoGebra软件对金刚石结构进行可视化模拟,构建金刚石网状结构并从中截取晶胞,对抽象的晶胞、晶胞内原子占位、六元环等问题进行直观形象地展示,给学生良好的视觉体验,提升了教学效果。
关键词:Geogebra ;金刚石结构;晶胞结构金刚石的晶体结构中,5个碳原子构成正四面体结构单元,其中4个碳原子位于正四面体的顶点,1个碳原子位于正四面体的几何中心,每个碳原子与最相邻的4个碳原子形成对称的共价键,每两个碳碳键的键角相等,为109°28′。
金刚石的晶胞是组成其结构的最小重复单元,具有对称性和周期性,但要在晶体结构中确定出这个最小单元,要求学生具备很强的空间想象能力,在学习该知识点的时候,大多数学生感到学习的困难。
在传统教学中,教师大多是借助实物模型来辅助教学,帮助学生建立晶胞这一抽象空间模型,突破教学难点,但普通教具存在无法全面直观地表现对称性和所有对称要素的立体位置等诸多的局限性[ 1 ]。
若在出示实物模型的同时,借助GeoGebra软件,模拟晶体结构的生成,再从晶体结构中截取晶胞,并从不同角度进行动态观察,这样就能将抽象的晶体结构模型直观、生动的反映出来,有助于学生头脑中晶体结构模型的构建,有效提高学生空间想象能力。
1 GeoGebra简介GeoGebra软件是一款教学辅助能力强于几何画板的动态数学软件,数形结合能力突出,能讓抽象的微观问题,转化为直观、生动的动态图形。
软件演示方便,来源免费且可跨平台使用,非常适合于理科学科课堂的教学演示,它不但可以利用3D绘图功能动态模拟晶体结构,还能利用旋转功能,从不同的角度动态观察晶体结构,同时在按钮与复选框的辅助下,能实时显示或隐藏单个晶胞外的碳原子,有助于晶胞的突出显示,具有较高的交互功能,加深学生对金刚石结构的理解与掌握,有利于学生思维的发展。
计算机图形学上机指导——金刚石图案算法实现说明(MFC)

金刚石图案算法实现说明1、设计要求:总体需求:将半径为r的圆周n等分,用直线将各等分点作隔点相连,形成的图案称为“金刚石”图案。
具体要求:1、在MFC环境中建立一个由“文件”、“绘图”和“帮助”这3个菜单项组成的菜单。
“文件”的子菜单为“退出”;“绘图”的子菜单为“Diamond”;“帮组”的子菜单为“关于”。
2、定义一个输入对话框类,提供两个参数的输入界面。
3、在客户区显示金刚石图案。
实现效果图如图1-1所示:图1-1 输入对话框及效果图2、具体步骤:1、点的设计1)类视图“ClassV iew”里选中TestClasses后右击,选择“New Class”,打开“New Class”对话框。
2)在“Class type”中选择“Generic Class”,并在“Name”中输入类名“P2D”,然后单击“Ok”。
(到此,在文件视图的“source file”下VC向导自动添加了“P2D.h”和“P2D.cpp”)3)打开“P2D.h”,作类的初始化定义:添加两个公有数据成员x,y,数据类型均为doulbe。
(思考:为什么要设为公有数据成员?)4)完成P2D类的定义。
2、对话框的设计1)在资源视图“Resource View”中选择“Dialog”,并右击,选择“Insert Dialog”。
2)在新建对话框内添加静态文本(static text)和编辑框(Edit Box)控件。
3)属性打开(Alt+Enter)。
Edit1控件的ID为IDC_EDIT1,并设置取值范围:5~50;Edit1控件的ID为IDC_EDIT2,并设置取值范围:200~500;4)双击对话框弹出“Adding a Class”对话框,保持默认值,添加一个新类“Create a new class”,单击“Ok”。
5)在弹出的“New class”对话框中填写对话框类名“InputDlg”,单击“Ok”。
(基类是MFC中的CDialog)6)对话框的设计。
金刚石晶胞中各原子的坐标参数课件

碳原子的坐标参数是金刚石晶胞 结构的关键参数之一,对于理解 金刚石的物理和化学性质具有重
要意义。
CHAPTER
金刚石晶胞的结构优化
结构优化的必要性
提高晶体结构预测精度 降低计算成本 揭示晶体性质
结构优化的方法
01
迭代收敛
02
最小二乘法
03
遗传算法
04
粒子群优化算法
结构优化的结果
提高预测精度
揭示晶体性质
光学仪器
金刚石具有高透光性和硬度,使其在 制造光学仪器和镜头时具有应用价值。
生物医学
金刚石的低毒性和生物相容性使其在 生物医学领域具有应用,例如用于制 造医疗器械和药物载体。
WATCHING
金刚石晶胞的结构参数
晶格常数
原子间距 夹角
CHAPTER
各原子的坐标参数
原子种类及数量
金刚石晶胞中包含碳原子数量为8个。 每个碳原子都连接另外4个碳原子。
原子坐标参数计算方法
各原子的坐标参数
碳原子的坐标参数为:x=0.075, y=0.075, z=0.235。
具体坐标值根据晶胞的对称性确 定。
抗氧化性
金刚石具有高度的抗氧化性,使 其在高温环境下保持稳定。
抗蚀性
金刚石的抗蚀性使其在某些化学 工业中具有应用,例如制造阀门
和泵。
金刚石晶胞的应用领域
机械工具
金刚石用于制造切割工具、钻头和铣 刀等机械工具,具有优异的耐磨性和 硬度。
电子工业
金刚石的热导率和电绝缘性能使其在 电子工业中具有应用,例如制造晶体 管和集成电路。
金刚石晶胞中各原子 的坐标参数课件
目 录
• 金刚石晶胞结构概述 • 各原子的坐标参数 • 金刚石晶胞的结构优化 • 金刚石晶胞的电子性质 • 金刚石晶胞的物理性能与应用
绘图程序实例

#include <dos.h>
main()
{
int i,t,x=300,y=50;
int gd=DETECT,gm;
initgraph(&gd,&gm,”c:\\tc");
setbkcolor(9);
setcolor(4);
printf("Input delay time(1~10):");
scanf("%d",&t);
setbkcolor(15); setcolor(1); t=6.28318*0.85/n; for (i=0;i<n;i++) {
r=r0*(1+i*1.0/n); x=-r*cos(t*i+PI/2)+x0; y=r*sin(i*t+PI/2)+y0; f=360.0*i*0.85/n+90; arc(x,y,f,f+180,r); getarccoords(&AInfo); line(AInfo.xend,AInfo.yend,AInfo.xstart,AInfo.ystart); } getch(); closegraph(); }
for (i=50;i<=254;i++) {
r=exp(0.02*i); x=-r*cos(0.2*i)+x0; y=r*sin(i*0.2)+y0; r=sqrt((x-x0)*(x-x0)+(y-y0)*(y-y0))/3; setfillstyle(0,0); fillellipse(x,y,r,r); } getch(); closegraph(); }
菊石图案
实验1 金刚石图案算法

实验1 金刚石图案算法一、实验目的在圆的基础上绘制金刚石图案。
金刚石图案是一个二维图案,仅使用二维坐标(x,y)就可以绘制:利用数学函数sin()及cos()函数计算点坐标,利用MoveTo()及LineTo ()函数将顶点连接起来,验证算法的正确性,并修改程序,加深对VC++绘图的理解。
二、实验任务将半径为r的圆周n等份,然后用直线将各等分点两两相连,形成的图案称为“金刚石”图案,并编程实现。
三、实验内容1.建立工程----“TestDiamond”。
2. 编写Diamond()函数:(1)指定n、及r的值;(2)根据等分点数,计算金刚石图案的等分角“theta”,theta=2*PI/n;(3)将等分点坐标存储在数组中;(4)设计二重循环,将各等分点两两相连。
3.OnDraw()中调用Diamond()函数。
4.注意:(1)用到sin()等数学函数,所以在CtestDiamondView.cpp中添加“#include "math.h"”语句;(2)为了简单起见(没有使用面向对象的方法定义“点”类,没有使用动态内存分配),初始化存储点坐标的数组x[]和y[]为固定大小,即x[i]和y[i]共同表示第i个点的x和y坐标。
5.代码(1)Diamond()函数void CTestDiamondView::Diamond(CDC *pDC, int n, double r){//n为等分点的个数,r为圆的半径double Theta;//thta为圆的等分角double PI=3.1415926;double x[40];double y[40];int MaxX=700;int MaxY=700;//圆心设定为(350 ,350)Theta=2*PI/n;for(int i=0;i<n;i++) //等分圆{x[i]=r*cos(i*Theta)+MaxX/2;y[i]=r*sin(i*Theta)+MaxY/2;}for(i=0;i<=n-2;i++) //二次循环,点点连接{for(int j=i+1;j<=n-1;j++){pDC->MoveTo(int(x[i]),int(y[i]));pDC->LineTo(int(x[j]),int(y[j]));}}}(2)OnDraw()函数void CTestDiamondView::OnDraw(CDC* pDC){CTestDiamondDoc* pDoc = GetDocument();ASSERT_V ALID(pDoc);// TODO: add draw code for native data hereCPen PenBlue(PS_SOLID,1,RGB(0,0,255));//定义蓝色笔pDC->SelectObject(&PenBlue);Diamond(pDC,31, 300 );}。
金刚石晶胞计算专题 ppt课件

2020/10/151源自(4))下图为B元素的某种单质晶体的晶胞,该晶体中B原子 的空间占有率为________________
2020/10/15
2
精品资料
思考:1.金刚石晶胞中,每个C原子均可与相邻的__4_ 个C构成实心的正四面体?
2.在一个小正四面体中平均含有__2_个碳原子? 3. 在金刚石中最小的环是___6_元环?
2020/10/15
5
1个金刚石晶胞含几个碳碳键? 如 何算?
2020/10/15
6
• 晶胞是构成晶体的基本重复单元.在二氧 化硅晶胞中有8个硅原子位 于立方晶胞的8 个顶角,有6个硅原子位于晶胞的6个面心, 还有4个硅原子与16个氧原子在晶胞内构成 4个硅氧四面体,它们均匀错开排列于晶胞 内.根据图示二氧化硅晶胞结构,每个晶 胞内所含“SiO2”基元数为( ) C A.4个
• B.6个
• C.8个
• D.18个
2020/10/15
7
1个环中平均含有__1_/2_个C原子? 含C-C键数为__1__个? 4.一个晶胞中含有C-C键数为__1_6_个?
2020/10/15
4
思考:1.一个金刚石晶胞里有_8_个碳原子? 2.平均每个碳原子有__2 _个C--C键? 3.每个碳原子为__12__个六元环共用? 4.每个C-C键为___6 _个六元环共用?
绘制金刚石图案pdf

知识要点自定义二维坐标系。
二维点类的定义方法。
对话框的创建及调用方法。
金刚石图案算法。
一维堆内存的分配与释放。
设计个性化的菜单项与工具栏。
创建Test工程模板。
一、案例需求1.案例描述将半径为r的圆周n等份,然后用直线段将每一个等分点和其他所有等分点连接,形成的图案称为金刚石图案。
使用对话框读入等分点个数与圆的半径,以屏幕客户区中心为圆心,请使用MFC的基本绘图函数绘制蓝色直线段构成的金刚石图案。
2.功能说明(1)程序运行界面提供“文件”、“图形”和“帮助”3个弹出菜单项。
“文件”菜单项提供“退出”子菜单,用于退出工程;“图形”菜单项提供“绘图”子菜单,用于绘制金刚石图案;“帮助”菜单项提供“关于”子菜单,用于显示开发信息。
(2)工具栏提供与子菜单项“退出”、“绘图”、“关于”相对应的图标按钮。
(3)单击“绘图”子菜单或“绘图”图标按钮,弹出图1-1(a)所示的输入对话框,读入圆的等分点个数和圆的半径,单击输入对话框的OK按钮绘制金刚石图案。
(4)自定义屏幕二维坐标系,原点位于客户区中心,x轴水平向右为正,y轴垂直向上为正。
以二维坐标系原点为圆心绘制半径为r的圆,将圆的n等分点使用直线段彼此连接形成金刚石图案,如图1-1(b)所示。
3.案例效果图案例的输入对话框和绘制效果如图1-1所示。
(a)输入对话框(b)金刚石图案图1-1输入对话框及效果图二、案例分析本案例设计的目的是使用Visual C++的MFC开发平台来建立一个Test工程,为后续的案例设计提供一个通用的工程模板。
Test工程包含了菜单设计、工具栏图标按钮设计、输入对话框设计和关于对话框设计等任务。
在建立Test工程模板的基础上,本案例以绘制金刚石图案为例,讲解二维点类CP2的设计方法和CTestView类的修改方法。
1.菜单和工具栏按钮根据案例的功能要求,需要在MFC环境中建立一个由“文件”、“图形”和“帮助”3个菜单项组成的弹出菜单,其中“文件”菜单项的子菜单为“退出”,用于退出Test工程,如图1-2所示;“图形”菜单项的子菜单为“绘图”,用于调用输入对话框绘制金刚石图案,如图1-3所示;“帮助”菜单项的子菜单为“关于”,用于显示开发人员信息,如图1-4所示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
输入框和效果
输入对话框
效果
案例分析
(x2,y2) (x1,y1)
(x3,y3)
(x0,y0)
(x4,y4)
案例设计
1 点类的设计
2 对话框类的设计
3 CAdamasView类的设计 4 菜单设计 5 工具条设计
1 点类的设计
添加新类
定义新类
添加的新类P2D
P2D的初始定义
2. adamasView.cpp文件 #define ROUND(a) int(a+0.5) //四舍五入 #include "math.h" //数学头文件 #define PI 3.1415926 //PI的宏定义 ……….. void CAdamasView::GetMaxX() //求屏幕最大x值 { CRect Rect; GetClientRect(&Rect); MaxX=Rect.right; } void CAdamasView::GetMaxY() //求屏幕最大x值 { CRect Rect; GetClientRect(&Rect); Max义
2 对话框类的设计
添加对话框
控件表列
添加对话框类
设计对话框类
3 CAdamasView类的设计
数据成员 ① double MaxX, MaxY; 声明屏幕最大的x坐标和y坐标。 ② P2D p[50]; 声明等分点数组。 ③ double n, r; 声明等分点个数和圆的半径。 成员函数 ① void GetMaxX(); 求屏幕最大的x坐标函数。 ② void GetMaxY(); 求屏幕最大的y坐标函数。 ③ void Diamond(); 绘制金刚石图案函数。
void CAdamasView::OnMENUDiamond() //菜单函数 { // TODO: Add your command handler code here InputDlg dlg; if (dlg.DoModal()==IDOK) //调用对话框模块,判断是否单击OK按钮 n=dlg.m_n;r=dlg.m_r; //对话框参数赋值 AfxGetMainWnd()->SetWindowText("案例:金刚石图案"); RedrawWindow(); //重绘窗口 GetMaxX();GetMaxY(); Diamond(); }
案例需求
1 案例描述 将半径为r的圆周n等分,然后用直线将各等分点隔点
相连,形成的图案称为“金刚石”图案,试编程实现。 2 案例效果图 案例输入对话框及效果图如图所示。 3 功能说明 1)程序运行界面提供文件、绘图和帮助这3个菜单项。 2)单机绘图菜单,弹出对话框读入圆的等分点个数和 圆的半径。 3)以屏幕客户区中心为圆心绘制金刚石图案。
void CAdamasView::Diamond() //金刚石函数 { //n为等分点的个数,r为圆的半径 CClientDC dc(this); //设置客户区设备上下文 CPen MyPen,*OldPen; MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255)); OldPen=dc.SelectObject(&MyPen); double Thta; Thta=2*PI/n; for(int i=0;i<n;i++) { p[i].x=r*cos(i*Thta)+MaxX/2; p[i].y=r*sin(i*Thta)+MaxY/2; } for(i=0;i<=n-2;i++) { for(int j=i+1;j<=n-1;j++) { dc.MoveTo(ROUND(p[i].x),ROUND(p[i].y)); dc.LineTo(ROUND(p[j].x),ROUND(p[j].y)); } } dc.SelectObject(OldPen); MyPen.DeleteObject(); }
将数据成员和成员函数添加到CAdamasView类。
在adamasView.h中分别添加数据成员和成员函数的 声明。定义了P2D类对象数组p[50],需要再本文件 中包含P2D.h头文件,即加入#include “P2D.h”语句。 同样为了能在“adamasView.cpp”里调用对话框类, 就需要在adamasView.h里包含对话框头文件,即加 入“InputDlg.h”语句。
admasView.h中添加变量成员和成员函数的声明
admasView.cpp中添加成员函数的定义
4 菜单设计
(1)设置菜单的ID。
子菜单设计
(2)添加菜单函数
添加菜单的Diamond成员函数
5 工具条设计
案例实现
1 adamasView.h文件 // adamasView.h : interface of the CAdamasView class /////////////////// ………… #include “P2D.h” #include “InputDlg.h” …………. // Operations public: void GetMaxX(); //求屏幕最大的x坐标函数。 void GetMaxY(); //求屏幕最大的y坐标函数。 void Diamond(); //绘制金刚石图案函数。 …………. // Implementation public: virtual ~CAdamasView(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: int MaxX,MaxY; //声明屏幕最大的x坐标和y坐标。 P2D p[50]; //声明等分点数组。 double n,r; //声明等分点个数和圆的半径。