实验1 金刚石图案算法
计算机图形学实验一报告

计算机图形学实验一报告————————————————————————————————作者:————————————————————————————————日期:ﻩ计算机科学与通信工程学院实验报告课程计算机图形学实验题目二维图形绘制学生姓名学号专业班级指导教师日期成绩评定表评价内容具体内容权重得分论证分析方案论证与综合分析的正确、合理性20%算法设计算法描述的正确性与可读性20%编码实现源代码正确性与可读性30%程序书写规范标识符定义规范,程序书写风格规范20%报告质量报告清晰,提交准时10%总分指导教师签名二维图形的绘制1.实验内容(1)绘制金刚石图案金刚石图案的成图规则是:把一个圆周等分成n份,然后每两点之间连线。
当n取奇数时,该图案可一笔连续绘成,即用MoveTo函数确定一个当前点,然后连续用LineTo函数连点成线。
请设计连线规则并编程实现。
(2)绘制魔术三角形绘制下图所示的魔术三角形图案,采用三种可明显区分的颜色填充。
(3)绘制递归圆应用递归的方法绘制如下所示的图案。
2.实验环境软硬件运行环境:Windows XP开发工具:visual studio 20083. 问题分析根据实验需求,需要在MFC环境中建立一个由“文件”、“绘图”和“帮助”这3个菜单项目组成的菜单,其中“文件”的子菜单为“退出”,完成退出应用程序的工作,“绘图”,的子菜单为“Diamond”,用于绘制金刚石图案等,“帮助”的子菜单为“关于”,用于显示开发人员信息;定义一个输人对话框类,提供个两个参数的输入界面。
最后在客户区输出图案。
1.金刚石图案:为把一个半径为300的圆,等分绘制金刚石图案;设计该算法为避免直线段的重复连接,需设计一个二重循环,代表起点索引号的外层整型变量i从i=0循环到i=n-2,代表终点索引号的内层整型变量j从j=i+1循环到j=n-1。
以(p[i].x,p[i].y)为起点,以(p[j].x,p[j].y)为终点依次连接各线段形成金刚石图案。
计算机图形学实验报告绘制金刚石

《计算机图形学》实验报告1. 实验目的巩固对计算机图形学绘图基础知识,绘制金刚石图案2. 问题描述对题目分析,金刚石图案是由依次连接位于圆上的不同等分点的直线段构成,等分点越多,金刚石图案越复杂;要绘制一个半径300,20等分的金刚石图案;首先要设计金刚石图案的数学模型,然后定义画笔编程绘制图案;。
3. 算法的思想为把一个半径为300的圆,等分绘制金刚石图案;设计该算法为避免直线段的重复连接,需设计一个二重循环,代表起点索引号的外层整型变量i从i=0循环到i=n-2,代表终点索引号的内层整型变量j从j=i+1循环到j=n-1.以(p[i].x,p[i].y)为起点,以(p[j].x,p[j].y)为终点依次连接各线段形成金刚石图案。
4.程序核心代码void CTestView::OnDraw(CDC* pDC){CTestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCRect 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;thta=2*PI/20;CPoint p[20];for(int i=0;i<20;i++){p[i].x=100*cos(i*thta);p[i].y=100*sin(i*thta);}for(i=0;i<=18;i++){for(int j=i+1;j<=19;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);}5.程序运行结果6.实验总结初次用C+ +绘图,看到是绘制金刚石,第一感觉是一定很复杂;其实不然,由于老师简化了实验题目要求,使我们的实验任务得以轻松了很多;但是好久没有动手编写代码了,感觉很多都忘记了,虽然这次的程序并不难,实验指导书上模型都已建好,但是实际操作还是有一些问题,有些错误改了很多次都总是没有结果,最后在同学的帮助下运行改错才得出结果;通过这次实验我了解到问题的难与易在于你是否动手实际操作了,有时看似简单永远不知道在哪个细节会出错!。
计算机图形学上机指导——金刚石图案算法实现说明(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)对话框的设计。
绘制金刚石图案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所示。
计算机图形学实验及课程设计

实验12 颜色渐变立方体
12.1 实验目的
掌握凸多面体消隐算法。 掌握双线性颜色插值算法。 建立基本三维场景。
实验12 颜色渐变立方体
12.2 实验要求
建立三维坐标系Oxyz,原点位于屏幕客户区中 心,x轴水平向右为正,y轴铅直向上为正,z轴 垂直于屏幕指向观察者。 以原点为体心绘制透视投影立方体,立方体8 个顶点的颜色分别为黑色、白色、红色、绿色、 蓝色、黄色、品红色和青色。背景色为黑色, 如图12-1所示。
实验4 二维几何变换
4.2 实验要求
使用静态切分视图,将窗口分为左右窗格。左窗格为继承于
CFormView类的表单视图类CLeftPortion,右窗格为一般视图
类CTestView。 左窗格提供代表“图形顶点数”(4、8、16和32)、“平移变 换”(x方向和y方向)、“旋转变换”(逆时针和顺时针)和 “比例变换”(放大和缩小)的滑动条,用于控制右窗格内的 图形变化。 右窗格内以屏幕客户区中心为图形的几何中心,绘制图形顶点 数从4变化为8、16和32的正多边形。为了表达图形的旋转,多
实验8 动态三视图
8.3 效果图
多面体动态三视图的效果如图8-1所示。
图8-1 多面体动态三视图的效果图
实验9 动态绘制Bezier曲线
9.1实验目的
掌握直线的参数表示法。 掌握德卡斯特里奥算法的几何意义。 掌握绘制二维Bezier曲线的方法。
实验9 动态绘制Bezier曲线
9.2 实验要求
实验8 动态三视图
8.1实验目的
掌握主视图变换矩阵。 掌握俯视图变换矩阵。 掌握侧视图变换矩阵。 掌握斜等测图绘制方法。
实验8 动态三视图
案例1 绘制金刚石图案算法24页文档

▪
26、要使整个人生都过得舒适、愉快,这是不可能的,因为人类必须具备一种能应付逆境的态度。——卢梭
▪
27、只有把抱怨环境的心情,化为上进的力量,才是成功的保证。——罗曼·罗兰
▪
28、知之者不如好之者,好之者不如乐之者。——孔子
▪
、勇猛、大胆和坚定的决心能够抵得上武器的精良。——达·芬奇
▪
30、意志是一个强壮的盲人,倚靠在明眼的跛子肩上。——叔本华
谢谢!
24
案例1 绘制金刚石图案算法
1、战鼓一响,法律无声。——英国 2、任何法律的根本;不,不成文法本 身就是 讲道理 ……法 律,也 ----即 明示道 理。— —爱·科 克
3、法律是最保险的头盔。——爱·科 克 4、一个国家如果纲纪不正,其国风一 定颓败 。—— 塞内加 5、法律不能使人人平等,但是在法律 面前人 人是平 等的。 ——波 洛克
金刚石晶格常数计算

金刚石晶格常数计算金刚石是一种由碳元素构成的天然矿物,以其硬度极高而闻名。
它的硬度仅次于石墨,是一种典型的共价晶体。
金刚石的晶格常数是其晶体结构的一个重要参数,可以通过实验或理论计算来确定。
下面将介绍金刚石的晶体结构和晶格常数的计算方法。
金刚石的晶体结构是一种体心立方结构。
每个碳原子与其四个相邻碳原子形成一个平面等边四边形,形成了紧密堆积的排列。
由于每个碳原子固定在晶体结构中的特定位置上,我们可以通过得到晶格常数来描述金刚石的晶体结构。
晶格常数的定义晶格常数通常用a表示,它是指相邻两个原子之间的距离。
在金刚石的晶体结构中,有两个原子相隔一个晶格常数a。
实验测量方法实验测量金刚石的晶格常数可以使用多种方法,其中最常用的是X射线衍射法。
该方法主要是通过照射金刚石晶体,利用晶体对入射X射线的衍射效应进行测量。
实验室中的X射线衍射仪可以测量出衍射图样,并通过对衍射图样的分析,得到晶体的晶格常数。
理论计算方法理论计算金刚石的晶格常数可以采用几种方法,其中最常见的是密度泛函理论(DFT)计算。
DFT是一种基于量子力学原理的计算方法,它可以描述物质的电子结构和晶体结构等性质。
通过DFT计算,我们可以得到金刚石晶体中碳原子的位置和晶格常数等信息。
DFT计算的过程主要包括以下几个步骤:1.选择适当的计算方法和基组。
在DFT计算中,我们需要选择适合金刚石晶体的计算方法和基组。
常用的计算方法包括局域密度近似(LDA)、广义梯度近似(GGA)等。
基组是描述电子波函数的一组函数集合,对结果的精度有重要影响。
2.构建金刚石晶体模型。
在进行DFT计算之前,需要构建金刚石晶体的结构模型。
模型中包括金刚石晶体中所有的原子坐标,以及晶胞的大小等信息。
3.进行DFT计算。
在DFT计算中,通过求解Kohn-Sham方程来确定体系的基态电子结构。
在计算过程中,考虑电子的库仑相互作用、交换-相关能等影响因素。
通过迭代计算,可以得到金刚石晶体的电子结构。
计算机科学与技术《计算机图形学》实验

实验报告册/习题册2012 / 2013 学年第1 学期系别实验课程专业班级姓名学号指导教师实验一——金刚石图案算法一、实验目的(1)掌握VC++6.0和MFC编程环境;(2)掌握设计程序模板的运行界面的方法。
二、实验内容将半径为r的圆n等分,然后用直线将各个等分点相连,形成的图案称为“金刚石”图案,编程实现。
三、实验步骤或主要程序清单四、实验结果及总结实验二——直线中点Bresenham算法一、实验目的(1)掌握中点Bresenham绘制直线的原理;(2)掌握设计中点Bresenham算法;(3)掌握编写Mbilne()子函数。
二、实验内容使用中点Bresenham算法绘制斜率为0<=k<=1的直线。
要求使用对话框输入直线的起点和终点坐标,直线的颜色为蓝色。
三、实验步骤或主要程序清单四、实验结果及总结习题1:计算起点坐标为(0,0),终点坐标(12,9)直线的中点Bresenham算法的每一步坐标值以及中点偏差判别式d的值,填入表1中,并用黑色点亮图1中的直线像素。
表1图1实验三——圆中点Bresenham算法一、实验目的(1)掌握八分法中点Bresenham算法绘制圆的原理;掌握设计程序模板的运行界面的方法。
八分法绘制圆的中点Bresenham算法;(2)掌握编写八分法绘制圆的CirclePoint(x,y)子函数;编写绘制圆的Mbcircle()子函数。
二、实验内容使用中点Bresenham算法绘制圆心位于屏幕客户区中心的圆。
要色求使用对话框输入圆的半径,圆的颜色为蓝色。
三、实验步骤或主要程序清单四、实验结果及总结习题1:请描述用中点Bresenham 算法生成圆 的步骤。
习题2: 什么是走样和反走样?0),(222=-+=R y x y x F实验四——Bezier曲线算法一、实验目的(1)掌握Bezire曲线定义。
(2)掌握设计绘制一次、二次和三次Bezier曲线算法。
二、实验内容在屏幕上单击鼠标左键绘制控制多边形,基于Bezier定义根据控制多边形的阶次绘制Bezier曲线。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验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 here
CPen PenBlue(PS_SOLID,1,RGB(0,0,255));//定义蓝色笔pDC->SelectObject(&PenBlue);
Diamond(pDC,31, 300 );
}。