计 算 机 图 形 学 实 验 报 告

合集下载

【报告】单片机定时器计数器实验报告

【报告】单片机定时器计数器实验报告

【关键字】报告单片机定时器计数器实验报告篇一:单片机计数器实验报告计数器实验报告㈠实验目的1. 学习单片机内部定时/计数器的使用和编程方法;2. 进一步掌握中断处理程序的编程方法。

㈡实验器材1. 2. 3. 4. 5.G6W仿真器一台MCS—51实验板一台PC机一台电源一台信号发生器一台㈢实验内容及要求8051内部定时计数器,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数,使用8051的T1作定时器,50ms中断一次,看T0内每50ms来了多少脉冲,将计数值送显(通过LED发光二极管8421码来表示),1秒后再次测试。

㈣实验说明1. 本实验中内部计数器其计数器的作用,外部事件计数器脉冲由P3.4引入定时器T0。

单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变,这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样,同时这就决定了输入波形的频率不能超过机器周期频率。

2. 计数脉冲由信号发生器输入(从T0端接入)。

3. 计数值通过发光二极管显示,要求:显示两位,十位用L4~L1的8421码表示,个位用L8~L5的8421码表示4. 将脉搏检查模块接入电路中,对脉搏进行计数,计算出每分钟脉搏跳动次数并显示㈤实验框图(见下页)程序源代码ORG 00000H LJMP MAINORG 001BH AJMP MAIN1 MAIN:MOV SP,#60HMOV TMOD,#15H MOV 20H,#14H MOV TL1,#0B0H MOV TH1,#3CHMOV TL0,#00H;T0的中断入口地址;设置T1做定时器,T0做计数器,都于方式1工作;装入中断次数;装入计数值低8位;装入计数值高8位MOV TH0,#00HSETB TR1 ;启动定时器T1 SETB TR0 ;启动计数器T0 SETB ET1 ;允许T1中断SETB EA ;允许CPU中断SJMP $;等待中断MAIN1: PUSH PSW PUSH ACC CLR TR0CLR TR1 MOV TL1,#0B0H MOV TH1,#3CHDJNZ 20H,RETUNT MOV 20H ,#14HSHOW: MOV R0,TH0 MOV R1,TL0MOV A,R1 MOV B,#0AH DIV ABMOV C,ACC.3MOV P1.0,C MOV C,ACC.2 MOV P1.1,C MOV C,ACC.1 MOV P1.2,C MOV C,ACC.0 MOV P1.3,CMOV A,B MOV C,ACC.3MOV P1.4,C MOV C,ACC.2 MOV P1.5,C MOV C,ACC.1 MOV P1.6,C MOV C,ACC.0MOV P1.7,C ;保护现场;装入计数值低8位;装入计数值高8位,50ms;允许T1中断;未到1s,继续计时;1s到重新开始;显示计数器T0的值;读计数器当前值;将计数值转为十进制;显示部分,将A中保存的十位赋给L0~L3 将B中保存的各位转移到A中;将个位的数字显示在L4~L7上;RETUNT:MOV TL0,#00H;将计数器T0清零MOV TH0,#00HSETB TR0SETB TR1POP ACCPOP PSWRETI ;中断返回在频率为1000HZ时,L0~L7显示为50;频率为300HZ时,L0~L7显示为15,结果正确,程序可以正确运行。

实验报告一 L、C元件上电流电压的相位关系

实验报告一 L、C元件上电流电压的相位关系

四川大学网络教育学院实验报告实验名称: 电工电子综合实践9001学习中心万州奥鹏中心姓名刘德春学号************实验内容:一、L、C元件上电流电压的相位关系二、虚拟一阶RC电路三、用数字电桥测交流参数.四、算术运算电路五、计数器六、触发器实验报告一L、C元件上电流电压的相位关系院校:四川大学电气信息学院专业:电气工程及其自动化实验人:刘德春,同组人:戴晓冬时间:2010年2月6日一、实验目的1、在正弦电压激励下研究L、C元件上电流,电压的大小和它们的相位关系,以及输入信号的频率对它们的影响。

2、学习示波器、函数发生器以及数字相位仪的使用二、仪器仪表目录1、交流电流表、交流电压表2、数字相位计三、实验线路、实验原理和操作步骤操作步骤:1、调节ZH-12实验台上的交流电源,使其输出交流电源电压值为220V。

2、按电路图接线,先自行检查接线是否正确,并经教师检查无误后通电3、用示波器观察电感两端电压u L和电阻两端u R的波形,由于电阻上电压与电流同相位,因此从观察相位的角度出发,电阻上电压的波形与电流的波形是相同的,而在数值上要除以“R”。

仔细调节示波器,观察屏幕上显示的波形,并将结果记录操作步骤:1、调节ZH-12实验台上的交流电源,使其输出交流电源电压值为24V。

2、按图电路图接线,先自行检查接线是否正确,并经教师检查无误后通电。

3、用示波器的观察电容两端电压u C和电阻两端电压u R的波形,(原理同上)。

仔细调节示波器,观察屏幕上显示的波形四、实验结果:1、在电感电路中,电感元件电流强度跟电压成正比,即I∝U.用1/(X L)作为比例恒量,写成等式,就得到I=U/(X L)这就是纯电感电路中欧姆定律的表达式。

电压超前电路90°。

分析:当交流电通过线圈时,在线圈中产生感应电动势。

根据电磁感应定律,感应电动势为die L dt=-(负号说明自感电动势的实际方向总是阻碍电流的变化)。

浅谈建筑工程结算审核的方法与要点

浅谈建筑工程结算审核的方法与要点

110浅谈建筑工程结算审核的方法与要点□文/张妍雪引言随着中国经济体制的逐步完善,建设工程实现了量变与质变,对工程造价的专业性与规范性也提出了更加严格的要求。

工程结算审核是一项囊括经济及技术的合成工作,是核定工程项目造价是否合理、合规的重要依据,也是政府各职能部门科学控制项目投资的有效手段。

工程结算审核是项目控制工程造价的最终关卡,审核质量与工程建设经济效益的产生有着直接关系。

因此,为了使工程项目经济效益最大化,要掌握运用科学的工程结算审核方法,严格做好结算审核工作。

一、结算审核的方法1.工程结算审核需要较全面的结算资料审核前期,接收时需要察看结算资料是否完备,若发现资料缺失应及时向委托方提出,由施工单位提供补充,避免影响后期的结算工作进度。

在结算审核过程中期与后期也会出现需要补充资料的情况,这就需要对资料的内容进行全方面的掌控。

结算资料包括工程结算书、工程计算模型或计算书、施工合同、工程竣工验收资料、工程施工图纸、竣工图纸、图纸会审记录、会议记要、设计变更、技术核定单、现场签证单、招标文件及招标答疑纪要、施工单位投标文件、开工报告、竣工报告等与工程结算有关的资料。

要仔细研究结算资料,注意相关资料是否合规。

例如工程结算书是否加盖编制人执业资格章及单位公章;工程计算模型或工程量计算书是否完整;施工合同是否存在补充合同或施工协议;竣工验收资料参建方盖章是否齐全;工程竣工图纸是否加盖竣工图章;图纸会审记录及设计变更是否体现在竣工图纸上;会议纪要是否存在与合同奖罚相关内容;现场签证单内容及流程是否符合规定;招标文件及招标答疑纪要是否含工程量清单;开工报告及竣工报告参建方盖章是否齐全等。

委托方对资料的真实性负责,【摘要】如今,工程造价行业规范不断完善,我国政府对建设工程管理也越发重视,作为工程造价管理中关键性的一环,结算审核对项目工程经济效益有着极大的影响。

建筑工程结算审核是对建筑项目工程价款结算合理性与合法性的审核,可以有效地防止工程造价高估、乱编造价的现象,对确保工程造价的真实性起到至关重要的作用。

设备工程验收报告范文(精选10篇)

设备工程验收报告范文(精选10篇)

设备工程验收报告范文(精选10篇)设备验收报告篇一1、操作步骤与方法2、操作结果……(每类设备需单独给出验收记录)三。

验收结论:通过上述测试和实验证明,___等设备数量与合同一致,且性能良好,运行正常,各项技术指标达到标准,符合相关实验要求,验收合格。

四。

验收人签字__学院:__学院:__学院:供应商:实验室及设备管理处:监察处、审计处:计划财务处:学科发展与建设处(211项目、985项目需此栏)五。

验收时间年月日设备验收报告篇二本工程,自开工以来,在上级领导、质监站、建设单位、设计单位、监理单位及有关部门的大力支持下,通过全体参建员工的努力和辛勤劳动,工程于20__年12月21日通过了五方主体预验收工作,并完成了有关问题的质量整改闭合,现消防工程已具备竣工验收条件,下面就工程具体情况汇报如下:一、工程概况:1、____________与广场路交叉口,南邻广场路,北邻飞鹏巷,西朝信河街,东邻居民区。

属居民集中区域,为消防重点控制单位,本工程建筑物为地下一层、地上十八~二十二层,独立裙房二层组成。

总建筑面积为40192m2,地下部分5252.34m2.总建筑高度分别为:64.3m、70.30m、80.90m、9.30m。

一层层高为4.50m、二层层高为4.80m,三层层高为4.50m;地下室一层高度分别为:机动车库5.60m;设备房4.80m非机动车库3.80m。

地下事室主要有两个消防通道口,设计容量为400m3的消防水池及设计容量为18m3的喷淋专用水池、消防排烟风机房、自备发电房等设备房,地上二层~三层商场部分设置有两座消防楼梯。

屋顶设有电梯机房,正压送风机房及消防水池设计容量18m3等设施。

2、建筑类别及耐火等级:一类高层建筑及地下室,耐火等级为一级,北侧商业部分为二类多层建筑,耐火等级为二级。

3、主体结构采用全现浇钢筋砼框架—框支剪力墙结构,地下室连体,地下室设有汽车库,非机动车库。

一、二层设有商场、办公区等公共场所,三层设为架空层(技术层)、露天部分设屋顶花园等休闲场所;四层及以上为住宅。

公差实训报告

公差实训报告

公差实训报告实验报告实验课程:学生姓名:学号:专业班级:南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合□设计□创新实验日期:实验成绩:实验一、公差与技术测量综合性实验一、实验项目名称公差与技术测量综合性实验二、实验目的为了使学生对《公差与技术测量》这门课程有一个整体、深入的认识,联系提高学生动手能力及工程实践能力。

开设该综合性实验,使学生能根据被测量零件,从已有的实验设备中选择合理测量仪器,确定测量方法步骤,并对零件的合格性与否做出相应的判断。

三、实验基本原理数字立式光学计光学主要用作相对法测量轴尺寸,在测量前先用量块或标准件对准零位,被测尺寸和量块尺寸的差值可在仪器的显示。

内径百分表也使用相对法测量孔尺寸。

表面粗糙度仪采用针描法测量。

四、主要仪器设备及耗材1、数字立式光学计2、涨簧式内径百分表3、表面粗糙度测量仪4、量块五、实验步骤1、根据给出的零件及其设计图纸,确定检测项目。

2、针对检测项目及其精度,选择合适的测量仪器。

3、就检测项目和选定的仪器,制定各检测步骤。

4、分别进行各项检测,并记录检测结果。

5、分析实验结果,得出结论。

1试验图8待检测零件六、实验数据及处理结果1、轴尺寸记录表2、孔尺寸记录表23、检测跳动误差记录表4、检测表面粗糙度的记录表34、结论4互换性与测量技术姓名:班级:学号:指导老师:同组人:公差实验报告王泉10模具10311140陈敏徐志豪12345姓名:专业:年级:学号:课任教师:批阅时间:分数:实验名称:千分尺的使用一.实验目的二.实验原理三.实验器材:四.实验过程五.数据记录与处理1.数据记录2.数据处理:六、实验总结实验报告实验课程:公差与技术测量学生姓名:学专业班级:南昌大学实验报告学生姓名:学号:5专业班级:实验类型:□验证□综合□设计□创新实验日期:实验成绩:实验一、公差与技术测量综合性实验一、实验项目名称公差与技术测量综合性实验二、实验目的为了使学生对《公差与技术测量》这门课程有一个整体、深入的认识,联系提高学生动手能力及工程实践能力。

地图学实验报告范文

地图学实验报告范文
学生姓名 学号 实验名称 选择一种专题地图设计 实验目的 掌握专题地图设计的基本方法。 实验内容 1、分析专题地图设计基本方法; 2、设计一种专题地图。 成绩
实验总结 专题地图是以普通地图为地理底图,根据专题内容需要专门编制而成 的。专题地图的内容主要有两个层面:一是地理基础,二是建立在地理基 础上的专题要素。 专题地图设计的基本方法: 1、专题地图的数据类型及处理。此专题图的数据类型为统计数据,来 源于各级部门的有关统计本门。 2、专题地图数据的分析评价。要对收集的统计数据进行科学性分析评 价即数据的可靠精确程度,以及数据是否齐全是否满足要求。 3、专题地图数据的加工处理。对搜集的人口以及面积的统计数据进行 处理,如单位换算、变数量指标等。 4、地理底图的编制。地理底图是专题地图的控制基础和骨架。此专题 地图的底图为中华人民共和国行政区划图,以此为底图将专题要素各省份 的人口和面积落实到图上。 5、选择专题地图的表示方法设计图例。因为人口及面积是点状分布的 数据,所以我选择点状符号法表示专题数据。图例是地图上所使用全部地 图符号的说明,设计专题地图时除了与地图上所使用的符号我还设计了柱 线图来表示人口分布规律与区域面积的关系。 6、专题地图的图面配置。在设计专题地图是应保证地图的以图形与视 觉效果,因此要注意符号及图形的清晰与易读,整体图面的视觉对比度, 图形与背景,图形的视觉平衡效果和图面设计的层次结构以及图面的合理 安排。
学生姓名 学号 成绩 实验名称 地图投影计算软件设计 实验目的 掌握地图投影算法并应用开发语言设计实现至少一种地图投影计算。 实验内容 1、分析主要几种地图投影算法; 2、应用开发语言设计实现至少一种地图投影计算。
实验总结
程序:
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm9 = class(TForm) Button1: TButton; Button2: TButton; GroupBox1: TGroupBox; Label1: TLabel; Label2: TLabel; Edit1: TEdit; Edit2: TEdit; GroupBox2: TGroupBox; Label4: TLabel; Label3: TLabel; Edit4: TEdit; Edit3: TEdit; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public

统计学实习报告6篇

统计学实习报告6篇

统计学实习报告6篇统计学实习报告篇1我是经济管理分院10届税务专业的一名学生,于20xx年3月1日到杭州鸿达纺织有限公司进行了两个月的定岗教育实习。

杭州鸿达纺织有限公司成立于20xx年4月,系杭州市萧山区坎山镇重点骨干企业。

公司占地60余亩,员工300余人,由日本喷气织机,德国产祖克浆纱机、空压机等设备。

公司是以生产纺织服装面料、中高档棉布及化纤面料为主的生产型企业。

一、实习内容我实习的岗位是生产统计,实习的主要内容如下:1、及时记录各项原始记录资料,以避免资料散失,保证统计资料的全面性和系统性。

2、编制统计报表的准备工作。

统计台帐能把大量的原始资料过录工作分散到平时去做,减少期末集中汇总的工作量。

3、做好生产日报的编制工作,系统的反映生产经营过程的变化,反映生产进度和动态,有利于对照生产经营过程变化,及时发现和纠正偏差。

4、做好员工薪资结算,为财务工作铺垫。

二、实习过程实习是每个实习生必须拥有的一段经历,它使我们在实践中了解社会,打开了视野,增长了见识,为我们以后进一步走向社会打下了坚实基础。

我实习的岗位是统计,统计是公司内部重要的职能部门。

公司关心的有关经济、生产经营等重大问题,都需要从统计角度进行分析、研究,得出结论,提出建议。

在定岗实习期间里,我所做的工作比较繁杂,整天所面对都是数据,很怕出错,因为统计是整个生产线的重要环节。

数据出错会影响整个生产线的进程,也会影响公司的效益,所以在工作期间我都非常谨慎,对于每项工作都很认真。

刚开始的一段时间,要到车间了解员工如何工作。

因为作为一个统计你必须先了解工艺流程,也就是生产线上总共有哪些工序,其次就是每个工序有多少台机器,每台机的加工范围和大概加工范围和大概产量。

在第一个月里我大概了解到我们工厂的生产流程及公司布局,受益良多。

接下来的日子里,我的工作就是做生产日报表,核算各车间的产量和工资工厂里面的工种很多,又分为准备车间、喷织车间、成品修织车间等,而不同工种的产量和工资的核算标准有各有不同。

PLC--实验报告

PLC--实验报告

P L C--实验报告(总22页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--重庆交通大学学生实验报告实验课程名称开课实验室学院年级专业班学生姓名李鸿博学号开课时间至学年第学期实验一基本指令的编程练习一、实验目的1、熟悉PLC实验装置,S7-200系列编程控制器的外部接线方法。

2、了解编程软件STEP7的编程环境,软件的使用方法。

3、掌握与、或、非逻辑功能的编程方法。

二、实验内容及实验要求通过程序判断、、、的输出状态,然后再输入并运行程序加以验证。

步序指令器件号说明步序指令器件号说明0 LD 输入7 ANI1 AN 输入8 = 或非门输出2 = 与门输出9 LDI3 LD 10 OI4 O 11 = 与非门输出5 = 或门输出12 END 程序结束6 LDI三、实验过程梯形图程序:实验步骤;1.梯形图中的、分别对应控制实验单元输入开关、。

2.通过专用PC/PPI电缆连接计算机与PLC主机。

打开编程软件STEP7,逐条输入程序,检查无误后,将所编程序下载到主机内,并将可编程控制器主机上的STOP/RUN开关拨到RUN位置,运行指示灯点亮,表明程序开始运行,有关的指示灯将显示运行结果。

3.拨动输入开关、,观察输出指示灯.、、、是否符合与、或、非逻辑的正确结果。

四、实验结果及总结达到了设计的要求和观察到了预期的实验效果。

1)对可编程控制器方面的内容,特别是对梯形图理解更深入了。

2)PLC设计重点就在于梯形图的设计,需要有很巧妙的设计方法,虽然以前也试着设计过类似的梯形图,但我觉的设计出一个好的梯形图并不是一件简单的事;有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。

3)当程序出错时,要多观察、对错误重复n次,估计是由什么原因引起的,从电路整体来看、分析可能是什么错误,再缩小范围。

如果实再找不出来,就出去吹吹风吧,不能急于求成,但不要放弃;要保持你的头脑清醒。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一:基本图形生成算法演示一、实验目的与要求了解OpenGL图形软件包绘制图形的基本过程及其程序框架,并在已有的程序框架中添加代码实现直线和圆的生成算法,演示直线和圆的生成过程,从而加深对直线和圆等基本图形生成算法的理解。

二、实验内容实验要求:(1)理解glut程序框架(2)理解窗口到视区的变换(3)理解OpenGL实现动画的原理(4)添加代码实现中点Bresenham算法画直线(5)添加代码实现改进Bresenham算法画直线(6)添加代码实现圆的绘制(可以适当对框架坐标系进行修改)实验操作和步骤:本次实验主要的目的是为了掌握基本画线和画圆算法,对于书上给出的代码,要求通过本次试验来具体的实现。

由于实验已经给出大体的框架,所以只需要按照书上的算法思想来设计具体实现代码,对于直线DDA算法,中点Bresenham算法及其改进算法,以及Bresenham画圆算法都有进一步的体会。

DDA算法是对每一步都要进行增量处理,然后取整,绘制,而Bresenham通过判断误差函数和求取递推公式来实现。

特别是对于整数的选择取舍,以及代码的流程和循环的控制有一个深入的了解。

同时也熟练运用OpenGL基本的绘图函数。

三、实验结果1-1. DDA算法画直线。

图1-1-1 ,显示每次DDA算法画线的坐标结果(如上)。

图1-1-2.显示DDA算法画圆过程及截图1-2. 中点Bresenham算法画直线1-2-1利用中点Bresenham算法画直线的各点坐标如上:1-2-2.中点Bresenham画线算法画线过程截图1-3. 利用改进的Bresenham画线算法来画图1-3-1.利用改进的Bresenham算法来画图各点坐标如上:1-3-2.利用改进的Bresenham算法画直线图形如上1-4.利用Bresenham画圆算法来作图1-4-1.利用Bresenham画圆法作图各点坐标如上:1-4-2.利用Bresenham画圆法作图及截图如上。

四、体会通过本次试验,我进一步加深了对于基本画图算法的理解。

特别是对于DDA,Bresenham 和画圆算法。

其中,DDA算法由于每一步都要处理浮点数的四舍五入,所以在绘图时要进行取整,效率较低,但是代码直观好懂,符合原理。

而对于Bresenham及其改进算法,都是在理论推导的基础上来实现的,然后经过整数化,形成了一个高效率的画图算法,所以需要适当的理解,特别是对于取整操作判断比较巧妙,实现了避免多次判断计算浮点数的目的,所以比较高效。

而绘制圆形的时候,用到的基本思想还是和Bresenham画图算法一样,只不过需要注意的是八分法画圆,这样只需要绘制其中的八分之一就可以利用对称的关系来绘制出整个图形。

而对于是否走下一步,或者是停留,判断的依据还是误差函数,和前面的思想是类似。

另外,通过实验训练了自己的编程能力,同时熟悉了OpenGL绘图的函数和流程,也进一步巩固了相关的知识。

五、源程序源代码如下://////////////////////////////////////////////////////////////////////////////实验要求:(1)理解glut程序框架//// (2)理解窗口到视区的变换//// (3)理解OpenGL实现动画的原理//// (4)添加代码实现中点Bresenham算法画直线//// (5)添加代码实现改进Bresenham算法画直线//// (6)添加代码实现圆的绘制(可以适当对框架坐标系进行修改)//// (7)适当修改代码实现具有宽度的图形(线刷子或方刷子)//////////////////////////////////////////////////////////////////////////////#include<windows.h>#include<gl/glut.h>#include"stdio.h"int m_PointNumber = 0; //动画时绘制点的数目int m_DrawMode = 1; //绘制模式 1 DDA算法画直线// 2 中点Bresenham算法画直线// 3 改进Bresenham算法画直线// 4 八分法绘制圆// 5 四分法绘制椭圆//绘制坐标线void DrawCordinateLine(void){int i = 0 ;//坐标线为黑色glColor3f(0.0f, 0.0f ,0.0f);glBegin(GL_LINES);for (i=10;i<=250;i=i+10){glVertex2f((float)(i), 0.0f);glVertex2f((float)(i), 250.0f);glVertex2f(0.0f, (float)(i));glVertex2f(250.0f, (float)(i));}glEnd();}//绘制一个点,这里用一个正方形表示一个点。

void putpixel(GLsizei x, GLsizei y){glRectf(10*x,10*y,10*x+10,10*y+10);}/////////////////////////////////////////////////////////////////////DDA画线算法////参数说明:x0,y0 起点坐标//// x1,y1 终点坐标//// num 扫描转换时从起点开始输出的点的数目,用于动画/////////////////////////////////////////////////////////////////////void DDACreateLine(GLsizei x0, GLsizei y0, GLsizei x1, GLsizei y1, GLsizei num){//设置颜色glColor3f(1.0f,0.0f,0.0f);//对画线动画进行控制if(num == 1)printf("DDA画线算法:各点坐标\n");else if(num==0)return;//画线算法的实现GLsizei dx,dy,epsl,k;GLfloat 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 / epsl ;yIncre = (float)dy / epsl ;for(k = 0; k<=epsl; k++){putpixel((int)(x+0.5), (int)(y+0.5));if (k>=num-1) {printf("x=%f,y=%f,取整后x=%d,y=%d\n", x, y, (int)(x+0.5),(int)(y+0.5));break;}x += xIncre;y += yIncre;if(x >= 25 || y >= 25) break;}}/////////////////////////////////////////////////////////////////////中点Bresenham算法画直线(0<=k<=1) ////参数说明:x0,y0 起点坐标//// x1,y1 终点坐标//// num 扫描转换时从起点开始输出的点的数目,用于动画/////////////////////////////////////////////////////////////////////void BresenhamLine(GLsizei x0, GLsizei y0, GLsizei x1, GLsizei y1, GLsizei num) {glColor3f(1.0f,0.0f,0.0f);if(num == 1){printf("中点Bresenham算法画直线:各点坐标及判别式的值\n");}else if(num==0)return;//中点Bresenham划线算法的实现GLsizei dx , dy, d, UpIncre, DownIncre, x, y;if (x0 > x1){x = x1; x1 = x0; x0 = x;y = y1; y1 = y0; y0 = y;}x = x0; y = y0;dx = x1 - x0; dy = y1 - y0;d = dx - 2 * dy;UpIncre=2*dx-2*dy;DownIncre=-2*dy;while(x<=x1){putpixel(x,y);printf("x = %d , y = %d \n",x,y);x++;if(d<0){y++;d+=UpIncre;}elsed+=DownIncre;}}/////////////////////////////////////////////////////////////////////改进的Bresenham算法画直线(0<=k<=1) ////参数说明:x0,y0 起点坐标//// x1,y1 终点坐标//// num 扫描转换时从起点开始输出的点的数目,用于动画/////////////////////////////////////////////////////////////////////void Bresenham2Line(GLsizei x0, GLsizei y0, GLsizei x1, GLsizei y1, GLsizei num) {glColor3f(1.0f,0.0f,0.0f);if(num == 1)printf("改进的Bresenham算法画直线:各点坐标及判别式的值\n");else if(num==0)return;//画线算法的实现GLsizei x,y,dx,dy,e;dx = x1-x0;dy = y1-y0;e = -dx;x=x0;y=y0;while(x<=x1){putpixel(x,y);printf("x = %d , y = %d \n",x,y);x++;e = e+2*dy;if(e>0){y++;e = e-2*dx;}}}/////////////////////////////////////////////////////////////////////Bresenham算法画圆////参数说明:x,y 圆心坐标//// R 圆半径//// num 扫描转换时从起点开始输出的点的数目,用于动画/////////////////////////////////////////////////////////////////////void BresenhamCircle(GLsizei x, GLsizei y, GLsizei R, GLsizei num){glColor3f(1.0f,0.0f,0.0f);if(num == 1)printf("Bresenham算法画圆:各点坐标及判别式的值\n");int d,k=0,xa,ya;xa=0;ya=R;d=1-R;while(xa<=ya){putpixel(xa+x,ya+y);putpixel(ya+x,xa+y);putpixel(-ya+x,xa+y);putpixel(-xa+x,ya+y);putpixel(-xa+x,-ya+y);putpixel(-ya+x,-xa+y);putpixel(ya+x,-xa+y);putpixel(xa+x,-ya+y);if (k>=num-1) {printf("x=%d , y=%d\n" , xa+x,ya+y);break;}k++;if(d<0) d+=2*xa+3;else{d+=2*(xa-ya)+5;ya--;}xa++;}}//初始化窗口void Initial(void){// 设置窗口颜色为蓝色glClearColor(1.0f, 1.0f, 1.0f, 1.0f);}// 窗口大小改变时调用的登记函数void ChangeSize(GLsizei w, GLsizei h){if(h == 0) h = 1;// 设置视区尺寸glViewport(0, 0, w, h);// 重置坐标系统glMatrixMode(GL_PROJECTION);glLoadIdentity();// 建立修剪空间的范围if (w <= h)glOrtho (0.0f, 250.0f, 0.0f, 250.0f*h/w, 1.0, -1.0);elseglOrtho (0.0f, 250.0f*w/h, 0.0f, 250.0f, 1.0, -1.0);}// 在窗口中绘制图形void ReDraw(void){//用当前背景色填充窗口glClear(GL_COLOR_BUFFER_BIT);//画出坐标线DrawCordinateLine();switch(m_DrawMode){case 1:DDACreateLine(0,0,20,15,m_PointNumber);break;case 2:BresenhamLine(0,0,20,15,m_PointNumber);break;case 3:Bresenham2Line(1,1,8,6,m_PointNumber);break;case 4:BresenhamCircle(12,12,10,m_PointNumber);break;default:break;}glFlush();}//设置时间回调函数void TimerFunc(int value){if(m_PointNumber == 0)value = 1;m_PointNumber = value;glutPostRedisplay();glutTimerFunc(500, TimerFunc, value+1);}//设置键盘回调函数void Keyboard(unsigned char key, int x, int y){if (key == '1') m_DrawMode = 1;if (key == '2') m_DrawMode = 2;if (key == '3') m_DrawMode = 3;if (key == '4') m_DrawMode = 4;m_PointNumber = 0;glutPostRedisplay();}int main(int argc, char* argv[]){glutInit(&argc, argv);//初始化GLUT库OpenGL窗口的显示模式glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowSize(600,600);glutInitWindowPosition(100,100);glutCreateWindow("基本图元绘制程序");glutDisplayFunc(ReDraw);glutReshapeFunc(ChangeSize);glutKeyboardFunc(Keyboard);//键盘响应回调函数glutTimerFunc(500, TimerFunc, 1);// 窗口初始化Initial();glutMainLoop(); //启动主GLUT事件处理循环return 0;}。

相关文档
最新文档