课程设计报告2011
- 格式:doc
- 大小:126.00 KB
- 文档页数:17
武汉纺织大学《数字逻辑》课程设计报告题目:三裁判表决器院系:数学与计算机学院专业班级:计科094学号:0904681223学生姓名:李勤指导教师:朱勇2011年 5 月20 日2一、 引言通过对传统数字电路的设计,掌握对数字逻辑设计概念的熟悉。
二、系统介绍:主要仪器是TOS-2数字电路实验系统。
选用的芯片是74LS151 8-1数据选择器。
通过设计好的逻辑表达式,在TOS--2数字电路上选择好个个需要连入的拐脚,进行连线。
实现三人表决器的功能。
三、设计任务及设计原理:引脚图功能表设计有三个变量输入A ,B C ,二个输出 W ,F,其中F=W ,逻辑表达式: F=ABC C AB C B A BC A +++。
A,B,C 通过三个开关相接,把D0---D7设置好之后, 16 15 14 13 12 11 10 974LS1511 2 3 4 5 6 7 8V CC D 4 D 5 D 6 D 7 A 0 A 1 A 2D 3 D 2 D 1 D 0 Y Y S GND 输 入输 出D A 2 A 1 A 0 S Y Y × × × × 1D 0 0 0 0 0D 1 0 0 1 0D 2 0 1 0 0D 3 0 1 1 0D 4 1 0 0 0D 5 1 0 1 0D 6 1 1 0 0D 7 1 1 1 00 1D 0 0D D 1 1D D 2 2D D 3 3D D 4 4D D 5 5D D 6 6D D 7 7D数学与计算机学院硬件课程设计报告就可以通过调节开关来输入。
输出接到一个LED灯,如果通过,那么灯就亮,否则的话,灭。
74LS1510 GA AB BC CD0D1 Y Y0 D3D3 WD41 D5D6D7方法之一四、代码清单:(机房答辩,提交代码)只需要连线,无代码。
五、程序调试心得体会:第一次线连接好之后,首先试验的是逻辑功能的正确性。
武汉纺织大学《数字逻辑》课程设计报告题目:5人表决器院系:数学与计算机学院专业班级:计科094学号:0904681223学生姓名:李勤指导教师:朱勇2011年 6 月2 日一、引言设计一个五人表决器,掌握异步清零以及锁存器的工作机制,掌握QuartusII软件的使用方法以及GW48型SOPC开发平台中的输入输出模式配置方法。
二、系统介绍:主要仪器是PC机、DICE-EH2000 EDA实验开发系统,用到的器件是ACEX1K系列EP1K30TC144-3的芯片。
三、设计任务及设计原理:v_in:表决信号输入端,高电平为赞成,低电平为反对;lock:判决锁存信号,上升沿表决结束,锁存表决输入信号,并计算输出表决信息;clr:清零信号,高电平有效,进入新的一次表决过程;v_over:表决结束信号,高电平有效,清零信号有效后,此信号为低电平。
num_agr:BCD码输出显示表决结果中赞成的人数;num_opp:BCD码输出显示表决结果中反对的人数;v_out:对应显示每个表决信号的状态;led_agr:判决结果为赞成时有效;led_opp:判决结果为反对时有效首先在QuartusII上进行功能和时序仿真,之后通过器件及其端口配置下载程序到SOPC开发平台中。
在硬件实现中:1.用实验平台的拨动开关实现5人表决的输入信号(v_in):注:要求使用最右面5个开关。
2. 用实验平台的按键实现清零(clr)和锁存(lock)信号:注:采用模式4的输入方式,要求使用键7实现清零(clr)、键6实现锁存(lock)。
(模式4的I/O设置见附录)3. 用实验平台的数码管实现赞成和反对人数的显示:注:要求使用数码管6显示赞成票数、数码管5显示反对票数。
4. 用实验平台的LED发光阵列实现表决结果和每人的表决信号:注:要求LED1显示判决赞成(led_agr)信号,LED8显示判决反对(led_opp)信号。
LED4、LED5、LED6同时显示判决结束信号。
电子线路CAD课程设计报告院系:信息工程学院专业:电子信息工程2011年 6 月20 日目录2.1 题目描述: .............................................................................. - 1 -2.1.1振荡电路设计仿真 .......................................................... - 1 -2.1.2 8051开发板 ..................................................................... - 1 -2.2 要求:....................................................................................... - 1 -三、课程设计报告内容 ....................................................................... - 2 -3.1 设计原理 ................................................................................. - 2 -3.1.1 振荡电路设计原理 ....................................................... - 2 -3.1.2 8051开发板设计原理 .................................................. - 2 -3.2 Proteus电路原理图设计 .......................................................... - 3 -3.2.1 振荡电路原理图: ......................................................... - 3 -3.2.2 8051开发板原理图 ......................................................... - 4 -3.3 软件仿真和结果分析 .............................................................. - 4 -3.3.1振荡电路 .......................................................................... - 4 -3.3.2 8051开发板各模块的仿真 ............................................. - 5 -3.4 设计和模拟过程中出现的问题及解决办法 .......................... - 9 -四、设计总结和心得体会 ................................................................... - 9 -一、课程设计目的课程设计以电子线路CAD软件设计原理为基础,重点在硬件设计领域中实用的电子线路设计软件的应用。
课程设计报告课程名称C语言程序设计课题名称图书借阅管理系统专业网络工程班级1002班学号************姓名指导教师唐北平、陈淑红、谭小兰2011年6 月30 日湖南工程学院课程设计任务书课程名称C语言程序设计课题图书借阅管理系统专业班级网络工程1002班学生姓名学号************指导老师唐北平、陈淑红、谭小兰审批任务书下达日期2011 年6 月20 日任务完成日期2011 年7 月03 日一、设计内容与设计要求1.设计内容:⑴问题描述:对一个有N本图书的图书馆,通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。
⑵功能要求:(1)、本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:书号、书名、作者、出版社、出版日期、单价、是否借出等。
(2)、本系统显示这样的菜单:a.图书基本信息录入b.图书基本信息显示c.图书基本信息删除d.图书基本信息修改e.图书基本信息查询(按书号查询、书名等)g. 退出系统(3)、执行一个具体的功能之后,程序将重新显示菜单。
2.设计要求:掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的问题,为将来编写软件积累一些典型的案例处理经验。
1.设计正确,方案合理。
2.界面友好,使用方便。
3.程序精炼,结构清晰。
4.设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。
5.上机演示。
6.按学号顺序选课题号,并在规定的时间内独自完成相关课题的C源程序编写、调整和运行。
源程序及编译生成各文件均保存在软盘中;7.按本任务书的要求,按附录的要求编写《课程设计报告》(Word文档格式)。
并用A4的复印纸打印并装订;二、进度安排第 18 周星期一 08:00——12:00熟悉这次课程设计的目的和课程设计的要求,明确了解一些要用到的文件和调用函数等,然后再把整个程序设计的总体框架、流程图等构思出来,并进行上机程序设计。
福建工程学院课程设计课程:算法与数据结构题目:哈希表专业:网络工程班级:xxxxxx班座号:xxxxxxxxxxxx姓名:xxxxxxx2011年12 月31 日实验题目:哈希表一、要解决的问题针对同班同学信息设计一个通讯录,学生信息有姓名,学号,电话号码等。
以学生姓名为关键字设计哈希表,并完成相应的建表和查表程序。
基本要求:姓名以汉语拼音形式,待填入哈希表的人名约30个,自行设计哈希函数,用线性探测再散列法或链地址法处理冲突;在查找的过程中给出比较的次数。
完成按姓名查询的操作。
运行的环境:Microsoft Visual C++ 6.0二、算法基本思想描述设计一个哈希表(哈希表内的元素为自定义的结构体)用来存放待填入的30个人名,人名为中国姓名的汉语拼音形式,用除留余数法构造哈希函数,用线性探查法解决哈希冲突。
建立哈希表并且将其显示出来。
通过要查找的关键字用哈希函数计算出相应的地址来查找人名。
通过循环语句调用数组中保存的数据来显示哈希表。
三、设计1、数据结构的设计和说明(1)结构体的定义typedef struct //记录{NA name;NA xuehao;NA tel;}Record;录入信息结构体的定义,包含姓名,学号,电话号码。
typedef struct //哈希表{Record *elem[HASHSIZE]; //数据元素存储基址int count; //当前数据元素个数int size; //当前容量}HashTable;哈希表元素的定义,包含数据元素存储基址、数据元素个数、当前容量。
2、关键算法的设计(1)姓名的折叠处理long fold(NA s) //人名的折叠处理{char *p;long sum=0;NA ss;strcpy(ss,s); //复制字符串,不改变原字符串的大小写strupr(ss); //将字符串ss转换为大写形式p=ss;while(*p!='\0')sum+=*p++;printf("\nsum====================%d",sum);return sum;}(2)建立哈希表1、用除留余数法构建哈希函数2、用线性探测再散列法处理冲突int Hash1(NA str) //哈希函数{long n;int m;n=fold(str); //先将用户名进行折叠处理m=n%HASHSIZE; //折叠处理后的数,用除留余数法构造哈希函数return m; //并返回模值}Status collision(int p,int c) //冲突处理函数,采用二次探测再散列法解决冲突{int i,q;i=c/2+1;while(i<HASHSIZE){if(c%2==0){c++;q=(p+i*i)%HASHSIZE;if(q>=0) return q;else i=c/2+1;}else{q=(p-i*i)%HASHSIZE;c++;if(q>=0) return q;else i=c/2+1;}}return UNSUCCESS;}void benGetTime();}else printf("\n此人不存在,查找不成功!\n");benGetTime();}(4)显示哈希表void ShowInformation(Record* a) //显示输入的用户信息{int i;system("cls");for( i=0;i<NUM_BER;i++)printf("\n第%d个用户信息:\n 姓名:%s\n 学号:%s\n 电话号码:%s\n",i+1,a[i].name,a[i].xuehao,a[i].tel);}(5)主函数的设计void main(int argc, char* argv[]){Record a[MAXSIZE];int c,flag=1,i=0;HashTable *H;H=(HashTable*)malloc(LEN);for(i=0;i<HASHSIZE;i++){H->elem[i]=NULL;H->size=HASHSIZE;H->count=0;}while (1){ int num;printf("\n ");printf("\n 欢迎使用同学通讯录录入查找系统");printf("\n 哈希表的设计与实现");printf("\n 【1】. 添加用户信息");printf("\n 【2】. 读取所有用户信息");printf("\n 【3】. 以姓名建立哈希表(再哈希法解决冲突) ");printf("\n 【4】. 以电话号码建立哈希表(再哈希法解决冲突) ");printf("\n 【5】. 查找并显示给定用户名的记录");printf("\n 【6】. 查找并显示给定电话号码的记录");printf("\n 【7】. 清屏");printf("\n 【8】. 保存");printf("\n 【9】. 退出程序");printf("\n 温馨提示:");printf("\n Ⅰ.进行5操作前请先输出3 ");printf("\n Ⅱ.进行6操作前请先输出4 ");printf("\n");printf("请输入一个任务选项>>>");printf("\n");scanf("%d",&num);switch(num){case 1:getin(a);break;case 2:ShowInformation(a);break;case 3:CreateHash1(H,a); /* 以姓名建立哈希表*/break;case 4:CreateHash2(H,a); /* 以电话号码建立哈希表*/break;case 5:c=0;SearchHash1(H,c);break;case 6:c=0;SearchHash2(H,c);break;case 7:Cls(a);break;case 8:Save();break;case 9:return 0;break;default:printf("你输错了,请重新输入!");printf("\n");}}system("pause");return 0;3、模块结构图及各模块的功能:四、源程序清单:#include<stdio.h>#include<stdlib.h>#include<string.h>#include <windows.h>#define MAXSIZE 20 #define MAX_SIZE 20 #define HASHSIZE 53 #define SUCCESS 1#define UNSUCCESS -1#define LEN sizeof(HashTable)typedef int Status;typedef char NA[MAX_SIZE];typedef struct {NA name;NA xuehao;NA tel;}Record;typedef struct {Record *elem[HASHSIZE]; int count; int size; }HashTable;Status eq(NA x,NA y) {if(strcmp(x,y)==0)return SUCCESS;else return UNSUCCESS;}Status NUM_BER;void getin(Record* a) {int i;system("cls");printf("输入要添加的个数:\n");scanf("%d",&NUM_BER);for(i=0;i<NUM_BER;i++){printf("请输入第%d个记录的姓名:\n",i+1);scanf("%s",a[i].name);printf("请输入%d个记录的学号:\n",i+1);scanf("%s",a[i].xuehao);printf("请输入第%d个记录的电话号码:\n",i+1);scanf("%s",a[i].tel);}}void ShowInformation(Record* a){int i;system("cls");for( i=0;i<NUM_BER;i++)printf("\n第%d个用户信息:\n 姓名:%s\n 学号:%s\n 电话号码:%s\n",i+1,a[i].name,a[i].xuehao,a[i].tel);}void Cls(Record* a){printf("*");system("cls");}long fold(NA s){char *p;long sum=0;NA ss;strcpy(ss,s);strupr(ss);p=ss;while(*p!='\0')sum+=*p++;printf("\nsum====================%d",sum);return sum;}int Hash1(NA str){int m;n=fold(str);m=n%HASHSIZE;return m;}int Hash2(NA str){long n;int m;n = atoi(str);m=n%HASHSIZE;return m;}Status collision(int p,int c){int i,q;i=c/2+1;while(i<HASHSIZE){if(c%2==0){c++;q=(p+i*i)%HASHSIZE;if(q>=0) return q;else i=c/2+1;}else{q=(p-i*i)%HASHSIZE;c++;if(q>=0) return q;else i=c/2+1;}}return UNSUCCESS;}void benGetTime();void CreateHash1(HashTable* H,Record* a){ int i,p=-1,c,pp;system("cls"); benGetTime();for(i=0;i<NUM_BER;i++){p=Hash1(a[i].name);pp=p;while(H->elem[pp]!=NULL) {pp=collision(p,c);if(pp<0){printf("第%d记录无法解决冲突",i+1);continue;}}H->elem[pp]=&(a[i]);H->count++;printf("第%d个记录冲突次数为%d。
课程设计报告——十点半游戏————————————————————————————————作者:————————————————————————————————日期:数据结构课程设计报告设计题目:十点半游戏院系: 经济管理学院专业班级:电子商务2009-2班学生姓名: 陈志勇、李琳、周敏指导教师:周长红2011年7月8日指导教师评语指导教师:年月日成绩评定学号姓名任务分工成绩0901060904陈志勇程序编写09010李琳报告撰写609150901060938 周敏搜集资料目录1.设计内容ﻩ错误!未定义书签。
1.1问题描述 .................................................................. 错误!未定义书签。
1.2设计要求ﻩ错误!未定义书签。
1.3开发环境 ..................................................................... 错误!未定义书签。
1.4研究思路ﻩ错误!未定义书签。
2.设计步骤ﻩ错误!未定义书签。
2.1需求分析 .................................................................... 错误!未定义书签。
2.2概要设计 .................................................................. 错误!未定义书签。
2.3详细设计 ................................................................... 错误!未定义书签。
2.4调试分析 ..................................................................... 错误!未定义书签。
电力电子课程设计报告采用双PWM控制的风力发电并网变流器时间:2011年6月目录摘要 (3)第0章绪论 (4)0.1.课程设计要求 (4)0.2.风力发电并网系统简介 (4)0.3.课程设计流程 (5)第1章主电路选型 (6)1.1整流电路选型 (7)1.2后级变换电路选型 (8)第2章主电路有源器件参数计算 (11)2.1主电路开关器件选择 (11)2.1.1智能功率模块 MIG50Q201H 简介 (11)第3章主电路无源器件参数计算 (14)3.1直流电压的确定 (14)3.2交流侧电感的选择 (14)3.3直流侧稳压电容选择 (15)第4章有源电路的驱动、保护原理设计 (16)4.1有源IPM驱动电路设计 (16)4.2IPM 驱动电路设计 (18)4.3保护电路设计 (19)第5章控制、检测电路原理设计 (21)5.1控制电路设计 (21)5.1.1基于TMS320F2812 控制电路的设计 (21)5.1.2TMS320F2812 的主要特点 (22)5.1.3基于TMS320F2812 的控制电路板的设计 (23)5.2信号检测电路设计 (25)5.2.1电网电压相位过零点检测电路 (25)5.2.2直流母线电压检测 (26)5.2.3电流检测电路 (28)第6章散热设计 (30)6.1散热基础设计 (30)6.2IGBT散热计算 (32)第7章仿真 (33)7.1设计技术参数及要求 (33)7.2系统仿真设计 (33)7.3仿真结果 (34)第8章参考文献 (37)摘要随着全球能源危机和环境污染的日益严重,风能和太阳能作为当前最理想的绿色能源越来越受到各国的重视。
但是由于风力发电的波动性和分散性,如果直接并入电网会对电网产生冲击,所以必须使风力发电的输出电压稳定在一定的电压和频率值之后才能并入电网,实现柔性并网。
解决这一问题的核心就是风力发电并网变流器。
在本次课程设计中,我们组设计了双PWM脉宽调制技术控制的并网变流器。
信息与计算机学院课程设计课程设计报告(2011/2012 第1学期)设计题目30秒定时器指导教师学生班级学生姓名学生学号考核成绩上海商学院2011年11月内容摘要此30秒计时器功能齐全,可以直接清零、启动、暂停和连续以及具有光电报警功能。
可以方便的实现断点计时功能,当设计器递减到零时,会发出光电报警信号。
在直接清零时,数码管显示器直接显示为00;计时器为30秒递减计时,计时间隔为1秒;计时器递减到0时,再回到30。
此设计器设计时,采用模块化得设计思想,使设计起来更加简单、方便、快捷。
关键词:秒脉冲发生器74LS192 计数器译码显示电路目录第一章引言 (1)1.1课程设计意义 (1)1.2研究状况概述 (1)第二章课程设计分析 (2)2.1 设计目的: (2)2.2 设计思路: (2)第三章系统方案论证过程 (3)3.1 30秒定时器总体方框图 (3)第四章模块电路设计 (4)4.1秒脉冲电路 (4)4.2 减计数电路 (4)4.3 译码和数码显示电路 (5)4.4时序控制电路.................................................................................... 错误!未定义书签。
4.5 整机框图 (6)第五章主要元器件与设备 (8)5.1元器件清单 (8)第六章系统调试与结果分析 (9)6.1 系统调试 (9)6.2 结果分析........................................................................................... 错误!未定义书签。
第七章总结.. (10)参考文献 (10)致谢 (10)附页: (11)第一章引言1.1课程设计意义数字显示30秒定时器是一个简单的数字电路,然而它可以扩展到很多实际应用当中来,比如篮球倒计时器,交通灯倒计时器等等。
《C语言程序设计》课程设计报告(2011— 2012学年第 1 学期)专业:计算机科学与技术班级:姓名学号:指导教师:成绩:计算机科学与技术系2011 年12月31日目录一、课程设计的目的与要求 (3)二、方案实现与调试 (3)2.1 掷骰子游戏 (3)2.2 汽车加油 (6)2.3 大优惠 (8)2.4 金币 (9)2.5小型通讯录设计 (12)三、课程设计分析与总结 (14)附录程序清单 (14)一、课程设计的目的与要求(含设计指标)(1)实验目的C语言是一种编程灵活,特色鲜明的程序设计语言。
C语言除了学习必须的基本知识,如概念,方法和语法规则之外,更重要的是进行实训,以提高学习者的动手和编程能力,这是学习语言的最终目的。
结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序设计任务书》,以在实训过程中给学生提供帮助。
达到如下目的:1.在课程结束之前,让学生进一步了解C程序设计语言的编程功能;2.让学生扎实掌握C程序设计语言的相关知识;3.通过一些有实际意义的程序设计,使学生体会到学以致用,并能将程序设计的知识与专业知识有效地结合,更全面系统地了解行业知识。
(2)设计要求根据实验内容的要求自由选定题目。
编写程序要求遵循如下基本要求:●模块化程序设计●锯齿型书写格式●必须上机调试通过二、方案实现与调试2.1掷骰子游戏•2.1.1 题目内容的描述两人玩骰子,游戏规则如下:1) 两人轮流掷骰子,每次掷两个,每人最多掷10次。
2) 将每人每次的分值累加计分3) 当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计7分;当两个点数不一样时,计其中点数较小的骰子的点数。
4) 结束条件:当双方都掷10次或经过5次后一方累计分数为另一方的两倍。
最后显示双方分数并判定优胜者。
•2.1.2输入数据类型、格式和内容限制和输出数据的说明输入数据类型:整型数格式:srand(time(0));输入数=rand()%6+1;内容限制:产生最多十次随机数输出数据说明:掷骰子的获胜者•2.1.3主要模块的算法描述2.1.4调试过程及实验结果出现的问题:每次循环产生的随机数相同。
《地球物理仪器课程设计》报告(测井方向)姓名:学号:班级:专业:勘查技术与工程2011年1月17日---2011年1月21日地球物理仪器课程设计要求(测井方向)(一)设计内容:设计一:基于集成运算放大器的交流放大电路设计与仿真实验1.设计一同相放大器,闭环增益为100;2.设计一反相放大器,闭环增益为100;3.设计一由两级串接的高倍数放大电路,其增益为10000。
设计二:测量信号滤波电路设计与仿真实验1.设计一中心频率为1kHz的无源滤波电路;2.设计一中心频率为1kHz的二阶有源滤波电路,其中心频率处的增益为1。
设计三:相位检波与有效值检测电路设计与仿真实验1.设计一相位检波电路;2.设计一交流信号有效值检测电路。
设计四:脉冲宽度计数法测量电路设计与仿真实验1.设计一个对一个脉冲宽度进行填充法计数的时差测量电路。
(二)报告要求:(1)封面一律按给定格式做;(2)按设计内容顺序逐个撰写,内容包括设计目的、电路、参数计算及仿真结果。
(3)最后给出总结和体会。
设计一1、设计一同相放大器,闭环增益为100电路图如下设计目的:将信号同相比例放大100倍设计原理:电路为负反馈电路,由于运放的增益一般有∣∙A ∣>10^5,所以∣1+∙A ∙F∣>>1,即电路处于深度负反馈条件下,虚短和虚断成立。
由虚短和虚断得:u -= u += ui故 令R2=99kohm-m ,R1=1kohm-m,则Au=uo/ui=100。
结构特点:负反馈引到反相输入端,信号从同相端输入反馈方式:电压串联负反馈仿真结果如上图,电源电压设置为10mv,第一个图输入端设置的是20mv 每格,输出端是2v 每格,所以输入和输出曲线重合第二个图输入端是20mv 每格,输出端为1v 每格,所以在曲线图上显示为输出是输入的2倍。
i o u R R u )1(12+=12R u R u u i i o =-2、设计一反相放大器,闭环增益为100电路图如下设计目的:将信号反相比例放大100倍设计原理:如第一题。
课程设计报告学生姓名:黄楷淏学号:0809290113 学院: 理学院班级: 信计081题目: 旋转立方体指导教师:常志文职称: 教授邓冠男助教2011 年 5 月 30 日摘要计算图形学基础课程已经学完,对相关高级语言程序设计的基本知识也有了一定的了解。
画出正方体并使之旋转,这一题目考察了程序设计自顶而下、逐步细化的相关基本思想。
题目难点在于实现可视化界面的交互、以及图像的旋转过程。
分析题目可以得出程序可以大致分为两个方面的内容:1.画出一个正方体。
2.使正方体旋转起来。
经过查找相关资料,本程序采用功能强大的图形库OPENGL并调用一系列WINDOWS API采用C/C++语言在Microsoft Visual C++6.0环境下编写。
很好的解决了用C/C++编写图形界面的难点问题。
通过Win32平台的OPENGL API实现了逼真的三维旋转效果。
关键词:正方体;旋转;可视化;OPENGL目录一、选题背景............................................................................................................................ - 1 -1.1 背景及目的....................................................................................................................... - 1 -1.2 题目概述........................................................................................................................... - 1 -二、算法设计............................................................................................................................ - 2 -2.1 数据结构........................................................................................................................... - 2 -2.2 功能实现........................................................................................................................... - 3 -三、程序及功能说明................................................................................................................ - 4 -3.1 鼠标控制正方体的旋转..................................................................................................... - 4 -四、结果分析............................................................................................................................ - 6 -4.1 结果分析........................................................................................................................... - 6 -五、总结................................................................................................................................ - 7 -六、课程设计心得体会............................................................................................................ - 8 -参考文献.................................................................................................................................... - 9 -源程序. (10)一、选题背景1.1背景及目的基本高级语言程序设计以及相关专业基础课程已经学习完毕,在学习过程中遇到的一些难点问题,为了综合以前学过的课程知识并融会贯通。
可以通过课程设计的独立完成来通过相关途径解决,从而能够更好的掌握程序设计的思想,提升编程能力。
1.2题目概述本题:画出一个正方体,并将它旋转起来。
主要应实现以下4点基本要求:1.用C/C++或VB实现;2.友好性:界面要友好;3.可读性:源程序代码清晰、有层次;4.用鼠标可以决定立方体旋转速度的快慢。
题目难点在于实现可视化界面的交互、以及图像的旋转过程。
分析题目可以得出程序可以大致分为两个方面的工作内容:1.画出一个正方体。
2.使正方体旋转起来。
通过在互联网上查找资料,我决定使用OPENGL图形库来解决C/C++编写图形界面困难的问题。
二、算法设计2.1数据结构2.1.1opengl及windows 坐标系OPENGL的三维坐标系如图1所示:XOY平面为屏幕所在图1 OPENGL三维坐标系WINDOWS的窗体坐标如图2所示:图2WINDOWS窗体二维坐标系2.1.2 大体设计方案综上所述,在本程序中。
首先使用相关的WINDOWS API创建窗口,其次实现程序的相应功能:1.使用OPENGL相应库函数画出正方体。
2.使之旋转起来。
3.在窗体中响应鼠标事件,控制正方体的旋转。
程序流程图如图3所示:图3 程序流程图程序的大体内容以及机构已经构造成型,功能部分还需要进一步的细化。
显然在消息循环中的内容还远不止这些,还需加入响应以下事件:1.当窗口大小发生变化时,重置窗口。
2.响应鼠标事件,并改变相对应的参数值,来改变旋转速度。
3.响应窗口中断事件,如关闭事件、屏保事件。
2.2功能实现2.2.1 opengl的主体绘制工作首先使用glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 清除屏幕和深度缓存,然后使用glLoadIdentity();重置当前的模型观察矩阵,确定绘制好图形的位置glTranslatef(0.0f,0.0f,z); 移入屏幕z 个单位。
函数glTranslatef(x, y, z)作用为沿着X, Y 和Z 轴移动;现在是本程序中最重要的语句:glRotatef(angle,0.0f,0.0f,0.0f),其中angle为每次旋转的角度,之后分别是XYZ三个轴的旋转分量,这三个旋转分量构成了三维坐标轴中的旋转法向量。
glBegin(GL_QUADS);绘制四边形(使用每4个连续的顶点定义一个四边形的"填充图元-GL_QUANS")。
三、程序及功能说明3.1 鼠标控制正方体的旋转上面我们介绍到旋转函数的作用,来解决程序是要使正方体旋转起来的问题,程序还有一个要求就是,当鼠标在正方体表面的中心处拖动旋转时,其旋转的速度很慢,反之,当鼠标在表面的边角处拽动时,其速度很快,这刚好符合人们实际中的习惯。
此功能用一下程序实现:V oid mouseMotion(int x, int y){float curPos[3], dx, dy, dz;trackball_ptov(x, y, winWidth, winHeight, curPos);if(trackingMouse){dx = curPos[0] - lastPos[0];dy = curPos[1] - lastPos[1];dz = curPos[2] - lastPos[2];if (dx || dy || dz) {angle = 90.0F * sqrt(dx*dx + dy*dy + dz*dz);axis[0] = lastPos[1]*curPos[2] - lastPos[2]*curPos[1];axis[1] = lastPos[2]*curPos[0] - lastPos[0]*curPos[2];axis[2] = lastPos[0]*curPos[1] - lastPos[1]*curPos[0];lastPos[0] = curPos[0];lastPos[1] = curPos[1];lastPos[2] = curPos[2];}}glutPostRedisplay();}效果如下图所示:四、结果分析4.1 结果分析程序解决了老师提出的问题及相关的要求,能够用鼠标控制正方体的旋转速度,以及旋转方向。
大致取得了满意的结果。
体现出了OPENGL图形库的易用性与强大的图形设计功能,而且十分容易上手学习使用。
通过这次设计,掌握了以下几大方面的内容:1.WINDOWS消息消息机制。
2.OPENGL库的调用方法,以及使用OPENG创建窗口与WINDOWS的交互过程3.OPENGL绘制图形的基本过程。
但是由于技术上的不足,立方体的制作显得不够真实,3D效果也不突出,所以对opengl 的学习在以后还得继续进行。
五、总结信息与计算科学专业经过两年的课程学习,已经积累了相关高级语言程序设计的基本知识。
在学习了这么多的专业课程之后,如何体现本专业的实用性(在以后的学习和生活中,如何能够更好的应用所学的内容)成为我一直在思考的问题。
通过本次课程设计:画出正方体并使之旋转这一题目,这一题目考察了程序设计自顶而下、逐步细化的相关基本思想。
开始题目要求使用C/C++或者VB语言来设计,为了克服并解决C/C++编写图新界面困难的问题,我查阅了相关资料。