文档库 最新最全的文档下载
当前位置:文档库 › 计算机代码lammps手册中文解析

计算机代码lammps手册中文解析

计算机代码lammps手册中文解析
计算机代码lammps手册中文解析

计算机代码l a m m p s手

册中文解析

集团标准化小组:[VVOPPT-JOPP28-JPPTL98-LOPPNN]

实验一二维基本图元的生成与填充 实验目的 1.了解并掌握二维基本图元的生成算法与填充算法。 2.实现直线生成的DDA算法、中点算法和Bresenham算法。 3.实现圆和椭圆生成的DDA和中点算法, 对几种算法的优缺点有感性认识。 二.实验内容和要求 1.选择自己熟悉的任何编程语言, 建议使用VC++6.0。 2.创建良好的用户界面,包括菜单,参数输入区域和图形显示区域。 3.实现生成直线的DDA算法、中点算法和Bresenham算法。 4.实现圆弧生成的中点算法。 5.实现多边形生成的常用算法, 如扫描线算法,边缘填充算法。 6.实现一般连通区域的基于扫描线的种子填充算法。 7.将生成算法以菜单或按钮形式集成到用户界面上。 8.直线与圆的坐标参数可以用鼠标或键盘输入。 6. 可以实现任何情形的直线和圆的生成。 实验报告 1.用户界面的设计思想和框图。 2.各种实现算法的算法思想。 3.算法验证例子。 4.上交源程序。 直线生成程序设计的步骤如下: 为编程实现上述算法,本程序利用最基本的绘制元素(如点、直线等),绘制图形。如图1-1所示,为程序运行主界面,通过选择菜单及下拉菜单的各功能项分别完成各种对应算法的图形绘制。 图1-1 基本图形生成的程序运行界面 2.创建工程名称为“基本图形的生成”单文档应用程序框架

(1)启动VC,选择“文件”|“新建”菜单命令,并在弹出的新建对话框中单击“工程”标签。 (2)选择MFC AppWizard(exe),在“工程名称”编辑框中输入“基本图形的生成”作为工程名称,单击“确定”按钮,出现Step 1对话框。 (3)选择“单个文档”选项,单击“下一个”按钮,出现Step 2对话框。 (4)接受默认选项,单击“下一个”按钮,在出现的Step 3~Step 5对话框中,接受默认选项,单击“下一个”按钮。 (5)在Step 6对话框中单击“完成”按钮,即完成“基本图形的生成”应用程序的所有选项,随后出现工程信息对话框(记录以上步骤各选项选择情况),如图1-2所示,单击“确定”按钮,完成应用程序框架的创建。 图1-2 信息程序基本 3.编辑菜单资源 设计如图1-1所示的菜单项。在工作区的ResourceView标签中,单击Menu项左边“+”,然后双击其子项IDR_MAINFRAME,并根据表1-1中的定义编辑菜单资源。此时VC已自动建好程序框架,如图1-2所示。 表1-1菜单资源表 菜单标题菜单项标题标示符ID 直线DDA算法生成直线ID_DDALINE Bresenham算法生成直线ID_BRESENHAMLINE 中点算法生成直线ID_MIDPOINTLINE 4.添加消息处理函数 利用ClassWizard(建立类向导)为应用程序添加与菜单项相关的消息处理函数,ClassName栏中选择CMyView,根据表1-2建立如下的消息映射函数,ClassWizard会自动完成有关的函数声明。 表1-2菜单项的消息处理函数 菜单项ID消息消息处理函数ID_DDALINE CONMMAN OnDdaline

计算机图形学上机实验报告 橡皮筋技术 计算机科学与技术学院 姓名: xxx 完成日期: 2010-12-7

实验:橡皮筋技术 一、实验目的与要求 实验目的:1.学会使用OpenGL,进一步掌握基本图形的绘制方法, 2.理解glut程序框架 3.理解窗口到视区的变换 4.理解OpenGL实现动画的原理 5.学会基于鼠标和键盘实现交互的实现方法 二、实验内容: 利用OpenGL实现折线和矩形的皮筋绘制技术,并采用右键菜单实现功能的选择 实现方法:1.橡皮筋技术的实现采用双缓存技术,绘制图形时分别绘制到两个缓存,交替显示。 2.右键菜单控制选择绘制折线还是绘制矩形,实现方法:通过菜单注册函数创建一个弹出式菜单,然后使用函数加入菜单项,最后使用函数讲菜单与鼠标右键关联起来,GLUT通过为菜单提供一个整数标识符实现对菜单的管理,在main主函数通过标识符用函数指定对应的菜单为当前的菜单。 2. 折线的橡皮筋绘制技术实现:鼠标所在位置确定一个点,移动鼠标时,每次移动时将点的信息保存在数组中,连接当前鼠标所在点和前一个点的直线段。 3.矩形的橡皮筋绘制技术:每个矩形由两个点唯一确定,鼠标当前点为第一个点,移动鼠标确定第二个点的位置,由这两点的坐标绘制出举行的四条边(直线段),矩形即绘制完毕。 三、实验结果

图鼠标右键菜单 图绘制矩形 四、体会 1> 经过这次实验,逐步对opengl软件有了一定的了解,而且对于理论知识有了很好的巩固,并非仅仅会C语言就能编写画图程序,gult程序有自己特殊的框架与实现过程.在这次试验中,虽然没有完全理解其原理,但在一定程度上已经为我们今后的学习应用打下了基础. 2>初步了解了如何在OpenGL实现基本的绘图功能,以及鼠标和键 盘灯交互设备的实现,还有如何由初始生成元绘制分形物体。在这个过 程中遇到了很多问题,程序的调试也是困难重重,通过自己看书思考和 老师、同学的帮助最终完成了程序的调试,在这一过程中加深了对理论 知识的理解,以及理清了理论到实践转换的一点点思路,再一次体会到 理论与实践的结合的重要性,今后要多多提高提高动手能力。

#include #include /* Initialize material property, light source, lighting model, * and depth buffer. */ void init(void) { GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat mat_shininess[] = { 50.0 }; GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; GLfloat lightPos[]={0.0f,0.0f,75.0f,1.0f}; GLfloat ambientLight[]={0.0f,0.0f,75.0f,1.0f}; GLfloat specular[]={0.0f,0.0f,75.0f,1.0f}; GLfloat specref[]={0.0f,0.0f,75.0f,1.0f}; GLfloat spotDir[]={0.0f,0.0f,75.0f,1.0f}; glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_SMOOTH);//设置阴影模型 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);//镜面光分量强度glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);//镜面光反射指数glLightfv(GL_LIGHT0, GL_POSITION, light_position);//设置光源的位置 glLightModelfv(GL_LIGHT_MODEL_AMBIENT,ambientLight); glLightfv(GL_LIGHT1,GL_DIFFUSE,ambientLight); glLightfv(GL_LIGHT1,GL_SPECULAR,specular); glLightfv(GL_LIGHT1,GL_POSITION,lightPos); glLightf(GL_LIGHT1,GL_SPOT_CUTOFF,50.0f); glEnable(GL_LIGHT1); glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE); glMaterialfv(GL_FRONT,GL_SPECULAR,specref); glMateriali(GL_FRONT,GL_SHININESS,128); glEnable(GL_LIGHTING);//启动光照 glEnable(GL_LIGHT0);//激活光源 glEnable(GL_LIGHT1);//激活光源 glEnable(GL_DEPTH_TEST); } /* 调用glut函数绘制一个球*/ void display(void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

2020计算机类专业分类大全 在选择大学专业的时候,很多同学都对计算机专业很有兴趣,那你知道2020计算机类专业分类都有那些吗?下面是为大家收集的关于2020计算机类专业分类大全_计算机类专业特色和 方向。希望可以帮助大家。 1计算机类专业分类 软件工程:主要分为软件设计、编程语言和软件测试。属于CS中的大方向,录取名额较多,有一定奖学金名额,就业市场广阔,但薪酬并不太高。 数据库:和现在的云数据、大数据很有关,毕业后可以做数据库管理工程师,但需要一定工作经验。对编程要求不高。 计算机网络:学习范畴较大,就业范畴广阔,设备商、运营商和第三方软件开放商都会开设相关职位。 申请竞争相对激烈,其他专业也可以申请。 人工智能:综合性学科,对计算机科学的学术背景的要求较高。找对口工作较难,但可以找到相关工作。 计算机图形学/多媒体:和人工智能、计算机网络和软件工程都有交叉。需要学习计算机成像、三维动画、网络影像传播等。

毕业后可以去游戏设计公司或电影视频制作公司。 算法:交叉学科,除了计算机科学的学术背景之外,最好还能有一定的生物、物理和化学类的背景。毕业后很多人会成为程序员。 系统架构:这个专业和硬件有关,需要在数字电路有一定学术背景。学起来比较累,不仅仅需要写代码。 但工作很好找,设备生产商需要这类人才。 人机交互:语音识别、alphago其实都是人机交互的产物。这是一个计算机科学、行为科学、人体工程学和设计的交互学科。申请时对工作经验比较看重。毕业后对口工作比较难找。 计算理论:理论型学科。不太好找工作。 信息科学:研究和信息相关的一切。录取人数有限,工作不好找。 MIS管理信息系统:有分工程院或商科的专业,一个偏技术一个偏管理。 2计算机专业主要方向 1.软件开发(主要专业:计算机科学与技术,软件工程等),就是编写代码,开发程序。有多种开发语言C/C++,JAVA,C#等。

实验1 直线的绘制 实验目的 1、通过实验,进一步理解和掌握DDA和Bresenham算法; 2、掌握以上算法生成直线段的基本过程; 3、通过编程,会在TC环境下完成用DDA或中点算法实现直线段的绘制。实验环境 计算机、Turbo C或其他C语言程序设计环境 实验学时 2学时,必做实验。 实验内容 用DDA算法或Besenham算法实现斜率k在0和1之间的直线段的绘制。 实验步骤 1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用C语言编写源程序; 3、编辑源程序并进行调试; 4、进行运行测试,并结合情况进行调整; 5、对运行结果进行保存与分析; 6、把源程序以文件的形式提交; 7、按格式书写实验报告。 实验代码:DDA: # include # include

void DDALine(int x0,int y0,int x1,int y1,int color) { int dx,dy,epsl,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; if(abs(dx)>abs(dy)) epsl=abs(dx); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { putpixel((int)(x+0.5),(int)(y+0.5),4); x+=xIncre; y+=yIncre; } } main(){ int gdriver ,gmode ;

实验报告 实验名称:三维分形算法 姓名:陈怡东 学号:09008406 程序使用说明: 程序打开后会呈现出3次分形后的四面体,因为考虑到观察效果的清晰所以就用了3次分形作为演示。 与用户的交互: 1键盘交互:分别按下键盘上的数字键1,2,3,4可以分别改变四面体的4个面的颜色。 按下字母c(不区别大小写)可以改变视图函数,这里循环切换3种视图 函数:glOrtho,glFrustum,gluPerspective,但是改变视图函数后要窗口形状变化后才能显现出来 按下字母键q(不区别大小写)可以退出程序 2鼠标交互:打开后在绘图的区域按下鼠标左键不放便可以拖动图形的视角,这里为了展现图形的3D效果因此固定了其中一点不放,这样就可以看到3D的效果。 鼠标右击则有弹出菜单显示,其中改变颜色则是同时改变4个面的颜色,本程序中运用了8组配色方案。 改变视图函数也是上述的3种函数,这里的效果立刻显现,但是还有很多问题达不到所要的效果,希望老师能帮忙解决一下。 设计思路: 分形算法:把四面体细分成更小的四面体,先找出其6个棱的中点并连接起来,这样就在4个顶点处各有一个小的四面体,原来四面体中剩下的部分应当去掉。仿效二维的生成方法,我们对保留的四个小四面体进行迭代细分。这样细分结束后通过绘制4个三角形来绘制每一个剩下的四面体。 交互的实现:键盘交互,即通过对按键的响应写上响应函数实现对视图和颜色的改变。 鼠标交互:通过对鼠标左右按键的 实现: 该部分只做了必要的介绍,具体实现见代码(附注释) 分形算法:void tetra(GLfloat *a,GLfloat *b,GLfloat *c,GLfloat *d)函数实现的是绘制四面体并且给四个面绘上不同的颜色。以区别开来,函数的实现细节见代码,有注释介绍。 void triangle3(GLfloat *a,GLfloat *b,GLfloat *c)函数用来绘制每个平面细分后的三角形。其中顶点设置为3维坐标glVertex3fv(a); void divide_tetra(GLfloat *a,GLfloat *b,GLfloat *c,GLfloat *d,int m)细分四面体的函数实现。前四个参数为传入点的坐标,最后参数m则是细分次数。先计算六个中点的坐标mid[1][j]=(a[j]+c[j])/2;3次循环则是对x,y,z三个坐标的一次计算,然后再递归调用绘制4个小四面体。 然后是显示回调函数void mydisplay3FX();这跟程序模板差不多不做过多介绍。 分形算法中必要重要的一点是隐藏面的消除。即书上2.10.3介绍的内容。对对象进行排

《信息技术服务分类与代码》解读 刘宏 2017-03-09 《信息技术服务分类与代码》标准为信息技术服务分类提供了分类方案,为信息技术服务体系的建立和维护提供了依据。目前公司的业务基本上是按照《信息技术服务分类与代码》进行分类,因此本文介绍了《信息技术服务分类与代码》主要内容。 信息技术服务需求包括纵横两个维度的内容,一是横向的由管理体系、人员、信息资源、技术支撑等组成的信息化体系要素,二是纵向的系统生命周期过程,即系统的概念、开发、生产、使用、支持、退役等六个阶段。 应对需方信息技术服务需求的各项内容,在供方层面产生了八项信息技术服务业务,包括咨询服务、培训服务、数据处理服务、软件开发和部署服务、测试服务、集成服务、IT运维服务和租赁服务。这八种信息技术服务应对需方信息技术服务需求全部要素的同时,也涵盖了系统生命周期过程的全部六个阶段。 运营 图 1 信息技术服务框架图 图1中,八类信息技术服务业务与信息技术服务需求的基本对应关系如下: 1)咨询服务,包括规划、设计、管理咨询、监理、评估认证和技术培训等,应对于 需方信息技术服务需求中的管理体系、人员、信息资源,以及技术支撑中的概念 和开发等阶段。 2)设计与开发服务,包括硬件、软件等设计开发,应对于需方技术支撑需求中的设

计开发阶段。 3)系统集成试试服务,包括基础环境、硬件、软件、安全等集成实施,以及集成实 施管理等,应对于需方技术支撑需求中的集成实施阶段。 4)运行维护服务,包括基础环境、硬件、软件、安全等运行维护服务,以及运行维 护管理等,应对于需方技术支撑需求中的运行维护阶段。 5)数据处理和存储服务,包括数据加工处理、存储等,应对于需方的信息资源需 求。 6)运营服务,包括软件、平台基础设施等运营服务,应对于需方的租用服务需求; 7)数字内容服务,包括数字动漫、游戏设计、地理信息等内容的加工与整合,应对 于需方的数字内容服务需求。 8)呼叫中心服务,包括业务咨询、信息查询、数据查询等信息服务,应对于需方的 信息服务需求; 在《信息技术服务分类与代码》标准编制中对信息技术服务框架的中的信息技术服务分类进行了调整。表1是目前使用的信息技术服务分类。 特别注意的是在2010年前,由于认知上的失误,将“系统运行与维护”定义为“IT服务”,即所谓“大IT服务(覆盖IT全生命周期阶段的服务)”与“小IT服务(覆盖系统运行与维护阶段的服务)之争。基于《信息技术服务分类与代码》标准,目前公司的业务都属于信息技术服务范围内。公司目前个别业务单元名称冠以“IT服务”(其核心业务为“系统平台运行维护”等),在国内进行业务沟通与交流时可能存在一定的误解,需要特别关注。 信息技术服务的分类与代码内容如下: 表1 信息技术服务分类与代码

《计算机图形学》实验报告姓名:郭子玉 学号:2012211632 班级:计算机12-2班 实验地点:逸夫楼507 实验时间:15.04.10 15.04.17

实验一 1 实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析实验数据的能力; 编程实现DDA 算法、Bresenham 中点算法;对于给定起点和终点的直线,分别调用DDA 算法和Bresenham 中点算法进行批量绘制,并记录两种算法的绘制时间;利用excel 等数据分析软件,将试验结果编制成表格,并绘制折线图比较两种算法的性能。 2 实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One (自制平台) 3 实验结果 3.1 程序流程图 (1)DDA 算法 是 否 否 是 是 开始 计算k ,b K<=1 x=x+1;y=y+k; 绘点 x<=X1 y<=Y1 绘点 y=y+1;x=x+1/k; 结束

(2)Mid_Bresenham 算法 是 否 否 是 是 是 否 是 否 开始 计算dx,dy dx>dy D=dx-2*dy 绘点 D<0 y=y+1;D = D + 2*dx - 2*dy; x=x+1; D = D - 2*dy; x=x+1; x

3.2程序代码 //-------------------------算法实现------------------------------// //绘制像素的函数DrawPixel(x, y); (1)DDA算法 void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) { //----------请实现DDA算法------------// float k, b; float d; k = float(Y1 - Y0)/float(X1 - X0); b = float(X1*Y0 - X0*Y1)/float(X1 - X0); if(fabs(k)<= 1) { if(X0 > X1) { int temp = X0; X0 = X1; X1 = temp; }

实验一 实验目的:生成彩色立方体 实验代码://ColorCube1.java import java.applet.Applet; //可以插入html import java.awt.BorderLayout; //窗口采用BorderLayout方式布局import com.sun.j3d.utils.applet.MainFrame; //application import com.sun.j3d.utils.geometry.ColorCube;//调用生成ColorCube的Utility import com.sun.j3d.utils.geometry.Primitive; import com.sun.j3d.utils.universe.*; //观测位置的设置 import javax.media.j3d.*; //核心类 import javax.vecmath.*; //矢量计算 import com.sun.j3d.utils.behaviors.mouse.*; public class ColorCube1 extends Applet { public BranchGroup createSceneGraph() { BranchGroup objRoot=new BranchGroup(); //BranchGroup的一个对象objRoot(放置背景、灯光)BoundingSphere bounds=new BoundingSphere(new Point3d(0.0,0.0,0.0),100.0);//有效范围 TransformGroup objTrans=new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); objRoot.addChild(objTrans); MouseRotate behavior = new MouseRotate(); behavior.setTransformGroup(objTrans); objRoot.addChild(behavior); behavior.setSchedulingBounds(bounds); MouseZoom behavior2 = new MouseZoom(); behavior2.setTransformGroup(objTrans); objRoot.addChild(behavior2); behavior2.setSchedulingBounds(bounds); MouseTranslate behavior3 = new MouseTranslate(); behavior3.setTransformGroup(objTrans); objRoot.addChild(behavior3); behavior3.setSchedulingBounds(bounds);

5.2.1公用设施类编码表 中类小类对象几何类型编码备注 供水管网 01 供水设备01 给水井盖01 点1 5010101011 水鹤02 点1 5010101021 消防栓03 点1 5010101031 水塔04 点1 5010101041 供水场站设施02 小区配套二次供水设施01 点1 5010102011 加水站02 点1 5010102021 供水站03 点1 5010102031 自建供水设施04 点1 5010102041 公共供水企业05 点1 5010102051 水厂06 面3 5010102063 燃气管网 02 燃气设备01 燃气井盖01点150******** 燃气调压箱02 点1 5010201021 燃气调压柜03 点1 5010201031 燃气管02 天然气管01 线2 5010202012 其他03 燃气管线标石01 点1 5010203011 排水管网 03 排水井盖设备01 合流检查井盖01 点1 5010301011 雨水检查井盖02 点1 5010301021 污水检查井盖03 点1 5010301031 雨水篦子04 点1 5010301041 溢流口05 点1 5010301051 出水口06 点1 5010301061 排水管02 截流沟01 线2 5010302012 盖板沟02 线2 5010302022 合流沟03 线2 5010302032 泵站03 排水泵站01 点1 5010303011 场站设施04 污水处理厂01 面3 5010304013 其他设施05 其他污水处理设施01 点1 5010305013 路灯04 路灯01 路灯01 点1 5010401011 线02 路灯输电线路01 线2 5010402012 箱03 箱式变01 点1 5010403011 路灯配电箱02 点1 5010403021 井盖04 路灯井盖01 点1 5010404011 景观灯05 灯01 景观灯01 点1 5010501011 供热06 供热01 热力井盖01 点1 5010601011 场站设施 换热站01 点1 5010602011 热源厂02 面3 5010602023 通信07 通信维护设备01 通信井盖01 点1 5010701011 通信设施02 通信设备箱01 点1 5010702011 通信基站02 点1 5010702021 通信铁塔03 点1 5010702031

中南大学信息科学与工程学院 实验报告实验名称 实验地点科技楼四楼 实验日期2014年6月 指导教师 学生班级 学生姓名 学生学号 提交日期2014年6月

实验一Window图形编程基础 一、实验类型:验证型实验 二、实验目的 1、熟练使用实验主要开发平台VC6.0; 2、掌握如何在编译平台下编辑、编译、连接和运行一个简单的Windows图形应用程序; 3、掌握Window图形编程的基本方法; 4、学会使用基本绘图函数和Window GDI对象; 三、实验内容 创建基于MFC的Single Document应用程序(Win32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下要求: 1、用户可以通过菜单选择绘图颜色; 2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形; 四、实验要求与指导 1、建立名为“颜色”的菜单,该菜单下有四个菜单项:红、绿、蓝、黄。用户通过点击不同的菜单项,可以选择不同的颜色进行绘图。 2、建立名为“绘图”的菜单,该菜单下有三个菜单项:直线、曲线、矩形 其中“曲线”项有级联菜单,包括:圆、椭圆。 3、用户通过点击“绘图”中不同的菜单项,弹出对话框,让用户输入绘图位置,在指定位置进行绘图。

五、实验结果: 六、实验主要代码 1、画直线:CClientDC *m_pDC;再在OnDraw函数里给变量初始化m_pDC=new CClientDC(this); 在OnDraw函数中添加: m_pDC=new CClientDC(this); m_pDC->MoveTo(10,10); m_pDC->LineTo(100,100); m_pDC->SetPixel(100,200,RGB(0,0,0)); m_pDC->TextOut(100,100); 2、画圆: void CMyCG::LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC) { int dx = xb - xa; int dy = yb - ya; int Steps, k; float xIncrement,yIncrement; float x = xa,y= ya; if(abs(dx)>abs(dy))

一、bresenham算法画直线 #include #include #include void draw_pixel(int ix,int iy) { glBegin(GL_POINTS); glVertex2i(ix,iy); glEnd(); } void Bresenham(int x1,int y1,int xEnd,int yEnd) { int dx=abs(xEnd-x1),dy=abs(yEnd-y1); int p=2*dy-dx; int twoDy=2*dy,twoDyMinusDx=2*dy-2*dx; int x,y; if (x1>xEnd) { x=xEnd;y=yEnd; xEnd=x1; } else { x=x1; y=y1; } draw_pixel(x,y); while(x

} void myinit() { glClearColor(0.8,1.0,1.0,1.0); glColor3f(0.0,0.0,1.0); glPointSize(1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,500.0,0.0,500.0); } void main(int argc,char **argv ) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(200.0,200.0); glutCreateWindow("CG_test_Bresenham_Line example"); glutDisplayFunc(display); myinit(); glutMainLoop(); } 二、中点法绘制椭圆 #include #include #include inline int round(const float a){return int (a+0.5);} void setPixel(GLint xCoord,GLint yCoord) { glBegin(GL_POINTS); glVertex2i(xCoord,yCoord); glEnd(); } void ellipseMidpoint(int xCenter,int yCenter,int Rx,int Ry) { int Rx2=Rx*Rx; int Ry2=Ry*Ry; int twoRx2=2*Rx2; int twoRy2=2*Ry2; int p; int x=0; int y=Ry; int px=0; int py=twoRx2*y; void ellipsePlotPoints(int,int,int,int);

#include #include #include using namespace std; float fTranslate; float fRotate; float fScale=1.0f;//set inital scale value to 1.0f bool bPersp=false; bool bAnim=false; bool bWire=false; int wHeight=0; int wWidth=0; //todo //hint:some additional parameters may needed here when you operate the teapot void Draw_Leg() { glScalef(1,1,3); glutSolidCube(1.0f); //glutWireCone(1.0f); } //定义操作茶壶的操作参数 int tx=1; int ty=0; int tz=0; int tangle=90; //定义设置scale的参数 float sx=0.3f; float sy=0.3f; float sz=0.3f; void Draw_Scene() { glPushMatrix(); glTranslatef(0,0,5); glRotatef(tangle,tx,ty,tz); // glutSolidTeapot(1); glutSolidSphere(1.0f,10,10);

glPopMatrix(); glPushMatrix(); glTranslatef(0,0,3.5); glScalef(5,4,1); glutSolidCube(1.0); glPopMatrix(); //leg1 glPushMatrix(); glTranslatef(1.5,1,1.5); Draw_Leg(); glPopMatrix(); //leg2 glPushMatrix(); glTranslatef(-1.5,1,1.5); Draw_Leg(); glPopMatrix(); //leg3 glPushMatrix(); glTranslatef(1.5,-1,1.5); Draw_Leg(); glPopMatrix(); //leg4 glPushMatrix(); glTranslatef(-1.5,-1,1.5); Draw_Leg(); glPopMatrix(); } void updateView(int width,int height) { glViewport(0,0,width,height);//reset the current viewport glMatrixMode(GL_PROJECTION);//select the projection matrix glLoadIdentity();//reset the projection matrix float whRatio=(GLfloat)width/(GLfloat)height; if(bPersp) { //todo when 'p'operation ,hint:use function glupersPective } else glOrtho(-3,3,-3,3,-100,100); glMatrixMode(GL_MODELVIEW);//select the modelview matrix

计算机软件分类代码表 10000 系统软件 30000 支持软件 60000 应用软件 11000 操作系统 31000 软件开发工具 61000 科学和工程计算软件 12000 系统实用程序 32000 软件评测工具 61500 文字处理软件 13000 系统扩充程序 33000 界面工具 62000 数据处理软件 14000 网络系统软件 34000 转换工具 62500 图形软件 19900 其他系统软件 34000 转换工具 63000 图象处理软件 35000 软件管理工具 64000 应用数据库软件 36000 语言处理程序 65000 事务管理软件 37000 数据库管理系统 65500 辅助类软件 38000 网络支持软件 66000 控制类软件 39900 其他支持软件 66500 智能软件 67000 仿真软件 67500 网络应用软件 68000 安全与保密软件 68500 社会公益服务软件 69000 游戏软件 69900 其它应用软件 计算机软件适用的国民经济行业代码表 0000 (依据1992-004号计算机软件登记公告的规定,若因软件适用的国民经济行业范围广无法对应某一行业时,可选择该项)0100 农业 5000 其他建筑业 0200 林业 5100 铁路运输业 0300 畜牧业 5200 道路运输业 0400 渔业 5300 城市公共交通业 0500 农、林、牧、渔服务业 5400 水上运输业 0600 煤炭开采和洗选业 5500 航空运输业 0700 石油和天然气开采业 5600 管道运输业 0800 黑色金属矿采选业 5700 装卸搬运和其他运输服务业 0900 有色金属矿采选业 5800 仓储业 5900 邮政业 1000 非金属矿采选业 1100 其他采矿业 6000 电信和其他信息传输服务业 1300 农副食品加工业 6100 计算机服务业 1400 食品制造业 6200 软件业 1500 饮料制造业 6300 批发业 1600 烟草制品业 6500 零售业 1700 纺织业 6600 住宿业 1800 纺织服装、鞋、帽制造业 6700 餐饮业 1900 皮革、毛皮、羽毛(绒)及其制品业 6800 银行业 6900 证券业 2000 木材加工及木、竹、藤、棕、草制品业 2100 家具制造业 7000 保险业 2200 造纸及纸制品业 7100 其他金融活动 2300 印刷业和记录媒介的复制 7200 房地产业 2400 文教体育用品制造业 7300 租赁业 2500 石油加工、炼焦及核燃料加工业 7400 商务服务业 2600 化学原料及化学制品制造业 7500 研究与试验发展 2700 医药制造业 7600 专业技术服务业 2800 化学纤维制造业 7700 科技交流和推广服务业 2900 橡胶制造业 7800 地质勘查业 7900 水利管理业 3000 塑料制品业 3100 非金属矿物制品业 8000 环境管理业 3200 黑色金属冶炼及压延加工业 8100 公共设施管理业 3300 有色金属冶炼及压延加工业 8200 居民服务业 3400 金属制品业 8300 其他服务业 3500 通用设备制造业 8400 教育 3600 专用设备制造业 8500 卫生 3700 交通运输设备制造业 8600 社会保障业 3900 电气机械及器材制造业 8700 社会福利业 8800 新闻出版业 4000 通信设备、计算机及其他电子设备制造业 8900 广播、电视、电影和音像业 4100 仪器仪表及文化、办公用机械制造业 4200 工艺品及其他制造业 9000 文化艺术业 4300 废弃资源和废旧材料回收加工业 9100 体育 4400 电力、热力的生产和供应业 9300 中国共产党机关 4500 燃气生产和供应业 9400 国家机构 4600 水的生产和供应业 9500 人民政协和民主党派 4700 房屋和土木工程建筑业 9600 群众团体、社会团体和宗教组织 4800 建筑安装业 9700 基层群众自治组织 4900 建筑装饰业 9800 国际组织

一、实验目的 1、掌握中点Bresenham直线扫描转换算法的思想。 2掌握边标志算法或有效边表算法进行多边形填充的基本设计思想。 3掌握透视投影变换的数学原理和三维坐标系中几何图形到二维图形的观察流程。 4掌握三维形体在计算机中的构造及表示方法 二、实验环境 Windows系统, VC6.0。 三、实验步骤 1、给定两个点的坐标P0(x0,y0),P1(x1,y1),使用中点Bresenham直线扫描转换算法画出连接两点的直线。 实验基本步骤 首先、使用MFC AppWizard(exe)向导生成一个单文档视图程序框架。 其次、使用中点Bresenham直线扫描转换算法实现自己的画线函数,函数原型可表示如下: void DrawLine(CDC *pDC, int p0x, int p0y, int p1x, int p1y); 在函数中,可通过调用CDC成员函数SetPixel来画出扫描转换过程中的每个点。 COLORREF SetPixel(int x, int y, COLORREF crColor ); 再次、找到文档视图程序框架视图类的OnDraw成员函数,调用DrawLine 函数画出不同斜率情况的直线,如下图:

最后、调试程序直至正确画出直线。 2、给定多边形的顶点的坐标P0(x0,y0),P1(x1,y1),P2(x2,y2),P3(x3,y3),P4(x4,y4)…使用边标志算法或有效边表算法进行多边形填充。 实验基本步骤 首先、使用MFC AppWizard(exe)向导生成一个单文档视图程序框架。 其次、实现边标志算法或有效边表算法函数,如下: void FillPolygon(CDC *pDC, int px[], int py[], int ptnumb); px:该数组用来表示每个顶点的x坐标 py :该数组用来表示每个顶点的y坐标 ptnumb:表示顶点个数 注意实现函数FillPolygon可以直接通过窗口的DC(设备描述符)来进行多边形填充,不需要使用帧缓冲存储。(边标志算法)首先用画线函数勾画出多边形,再针对每条扫描线,从左至右依次判断当前像素的颜色是否勾画的边界色,是就开始填充后面的像素直至再碰到边界像素。注意对顶点要做特殊处理。 通过调用GDI画点函数SetPixel来画出填充过程中的每个点。需要画线可以使用CDC的画线函数MoveTo和LineTo进行绘制,也可以使用实验一实现的画直线函数。 CPoint MoveTo(int x, int y ); BOOL LineTo(int x, int y ); 实现边标志算法算法需要获取某个点的当前颜色值,可以使用CDC的成员函数 COLORREF GetPixel(int x, int y ); 再次、找到文档视图程序框架视图类的OnDraw成员函数,调用FillPolygon 函数画出填充的多边形,如下: void CTestView::OnDraw(CDC* pDC) { CTestcoodtransDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);

计算机图形学实验报告信息学院计算机专业20081060183 周建明 综括: 利用计算机编程语言绘制图形,主要实现以下内容: (1)、中点算法生成任意斜率直线,并设置线型线宽。 (2)、中点算法生成圆 (3)、中点算法生成椭圆 (4)、扫描算法实现任意多边形填充 (5)、Cohen_Sutherland裁剪 (6)、自由曲线与曲面的绘制 (7)、二维图形变换 (8)、三视图变换 实验一、直线的生成 一、实验内容 根据提供的程序框架,修改部分代码,完成画一条直线的功能(中点画线法或者Bresenham画线法任选一),只要求实现在第一象限内的直线。 二、算法原理介绍 双击直线生成.dsw打开给定的程序,或者先启动VC++,文件(file)→打开工作空间(open workspace)。打开直线生成view.cpp,按注释改写下列函数: 1.void CMyView::OnDdaline() (此为DDA生成直线) 2.void CMyView::OnBresenhamline()(此为Bresenham画直线) 3.void CMYView::OnMidPointLine()(此为中点画线法) 三、程序源代码 1.DDA生成直线画法程序: float x,y,dx,dy,k; dx=(float)(xb-xa); dy=(float)(yb-ya); k=dy/dx; x=xa; y=ya;

if(abs(k)<1) { for (x=xa;x<=xb;x++) { pdc->SetPixel(x, int(y+0.5),COLOR); y=y+k; } } if(abs(k)>=1) { for(y=ya;y<=yb;y++) { pdc->SetPixel(int(x+0.5),y,COLOR); x=x+1/k; } } //DDA画直线结束 } 2.Bresenham画直线源程序: float b,d,xi,yi; int i; float k; k=(yb-ya)/(xb-xa); b=(ya*xb-yb*xa)/(xb-xa); if(k>0&&k<=1) for(i=0;i=0) { xi=xa+1; yi=ya; xa++; ya=ya+0.5; } if(d<0) { xi=xa+1; yi=ya+1; xa++; ya=ya+1.5; } pdc->SetPixel(xi,yi,COLOR); }

相关文档
相关文档 最新文档