计算机图形学论文

2024年12月03日 04:44
有5个网友回答
网友(1):

同志你好:
一下是我给你总结的资料,请核对后使用。
最后祝你工作愉快!

计算机图形学

计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。
简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的,如工程图、等高线地图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。
计算机图形学一个主要的目的就是要利用计算机产生令人赏心悦目的真实感图形。为此,必须建立图形所描述的场景的几何表示,再用某种光照模型,计算在假想的光源、纹理、材质属性下的光照明效果。所以计算机图形学与另一门学科计算机辅助几何设计有着密切的关系。事实上,图形学也把可以表示几何场景的曲线曲面造型技术和实体造型技术作为其主要的研究内容。同时,真实感图形计算的结果是以数字图像的方式提供的,计算机图形学也就和图像处理有着密切的关系。
图形与图像两个概念间的区别越来越模糊,但还是有区别的:图像纯指计算机内以位图形式存在的灰度信息,而图形含有几何属性,或者说更强调场景的几何表示,是由场景的几何模型和景物的物理属性共同组成的。
计算机图形学的研究内容非常广泛,如图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法、非真实感绘制,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。
计算机图形学的发展
1963年,伊凡•苏泽兰(Ivan Sutherland)在麻省理工学院发表了名为《画板》的博士论文, 它标志着计算机图形学的正式诞生。至今已有三十多年的历史。此前的计算机主要是符号处理系统,自从有了计算机图形学,计算机可以部分地表现人的右脑功能了,所以计算机图形学的建立具有重要的意义。近年来, 计算机图形学在如下几方面有了长足的进展:
1、智能CAD
CAD 的发展也显现出智能化的趋势,就目前流行的大多数CAD 软件来看,主要功能是支持产品的后续阶段一一工程图的绘制和输出,产品设计功能相对薄弱, 利用AutoCAD 最常用的功能还是交互式绘图,如果要想进行产品设计, 最基本的是要其中的AutoLisp语言编写程序,有时还要用其他高级语言协助编写,很不方便。而新一代的智能CAD 系统可以实现从概念设计到结构设计的全过程。例如,德国西门子公司开发的Sigraph Design软件可以实现如下功能:① 从一开始就可以用计算机设计草图,不必耗时费力的输入精确的坐标点,能随心所欲的修改,一旦结构确定,给出正确的尺寸即得到满意的图纸;② 这个软件中具有关系数据结构, 当你改变图纸的局部,相关部分自动变化,在一个视图上的修改,其他视图自动修改,甚至改变一个零件图,相关的其它零件图以及装配图的相关部分自动修改:③ 在各个专业领域中,有一些常用件和标准件, 因此,希望有一个参数化图库。而Sigraph不用编程只需画一遍图就能建成自己的图库;④Sigraph还可以实现产品设计的动态模拟用于观察设计的装置在实际运行中是否合理等等。智能CAD的另一个领域是工程图纸的自动输入与智能识别,随着CAD技术的迅速推广应用,各个工厂、设计院都需将成千上万张长期积累下来的设计图纸快速而准确输入计算机,作为新产品开发的技术资料。多年来,CAD 中普遍采用的图形输入方法是图形数字化仪交互输入和鼠标加键盘的交互输入方法.很难适应工程界大量图纸输入的迫切需要。因此, 基于光电扫描仪的图纸自动输入方法已成为国内外CAD工作者的努力探索的新课题。但由于工程图的智能识别涉及到计算机的硬件、计算机图形学、模式识别及人工智能等高新技术内容,使得研究工作的难点较大。工程图的自动输入与智能识别是两个密不可分的过程,用扫描仪将手绘图纸输入到计算机后,形成的是点阵图象. CAD 中只能对矢量图形进行编辑, 这就要求将点阵图象转化成矢量图形.而这些工作都让计算机自动完成.这就带来了许多的问题.如① 图象的智能识别;② 字符的提取与识别;③ 图形拓扑结构的建立与图形的理解;④实用化的后处理方法等等。国家自然科学基金会和863计划基金都在支持这方面的研究, 国内外已有一些这方面的软件付诸实用,如美国的RVmaster,德国的VPmax, 以及清华大学,东北大学的产品等。但效果都不很理想.还未能达到人们企盼的效果。
2 计算机美术与设计
2.1 计算机美术的发展
1952年.美国的Ben .Laposke用模拟计算机做的波型图《电子抽象画》预示着电脑美术的开始(比计算机图形学的正式确立还要早)。计算机美术的发展可分为三个阶段:
(1)早期探索阶段(1952 1968年)主创人员大部分为科学家和工程师,作品以平面几何图形为主。1963年美国《计算机与自动化》杂志开始举办年度“计算机美术比赛”。
代表作品:1960年Wiuiam Ferrter为波音公司制作的人体工程学实验动态模拟.模拟飞行员在飞机中各种情况;1963年Kenneth Know Iton的打印机作品《裸体》。1967年日本GTG小组的《回到方块》。
(2)中期应用阶段(1968年~1983年)以1968年伦敦第一次世界计算机美术大展一“控制论珍宝 (Cybernehic Serendipity1为标志,进入世界性研究与应用阶段;计算机与计算机图形技术逐步成熟, 一些大学开始设置相关课题, 出现了一些CAD应用系统和成果, 三维造型系统产生并逐渐完善。代表作品:1983年美国IBM 研究所Richerd Voss设计出分形山(可到网站“分形频道hrtp:ttfracta1.126.tom 中查找有关“分形”的知识)
(3)应用与普及阶段(1984年~现在)以微机和工作站为平台的个人计算机图形系统逐渐走向成熟, 大批商业性美术(设计)软件面市; 以苹果公司的MAC 机和图形化系统软件为代表的桌面创意系统被广泛接受,CAD成为美术设计领域的重要组成部分。代表作品:1990年Jefrey Shaw的交互图形作品“易读的城市f The legible city) 。
2.2 计算机设计学(Computer Des i gn i cs)
包括三个方面:环境设计(建筑、汽车)、视觉传达设计(包装)、产品设计。
CAD对艺术的介入,分三个应用层次:
(1)计算机图形作为系统设计手段的一种强化和替代; 效果是这个层次的核心(高精度、高速度、高存储)。
(2)计算机图形作为新的表现形式和新的形象资源。
(3)计算机图形作为一种设计方法和观念。
3 计算机动画艺术
3.1 历史的回顾
计算机动画技术的发展是和许多其它学科的发展密切相关的。计算机图形学、计算机绘画、计算机音乐、计算机辅助设计、电影技术、电视技术、计算机软件和硬件技术等众多学科的最新成果都对计算机动画技术的研究和发展起着十分重要的推动作用50年代到60年代之间,大部分的计算机绘画艺术作品都是在打印机和绘图仪上产生的。一直到60年代后期,才出现利用计算机显示点阵的特性,通过精心地设计图案来进行计算机艺术创造的活动。
70年代开始.计算机艺术走向繁荣和成熟 1973 年,在东京索尼公司举办了“首
届国际计算机艺术展览会”80年代至今,计算机艺术的发展速度远远超出了人们的想象 在代表计算机图形研究最高水平的历届SIGGRAPH年会上,精彩的计算机艺术作品层出不穷。另外,在此期间的奥斯卡奖的获奖名单中,采用计算机特技制作电影频频上榜,大有舍我其谁的感觉。在中国,首届计算机艺术研讨会和作品展示活动于1995年在北京举行 它总结了近年来计算机艺术在中国的发展,对未来的工作起到了重要的推动作用
3.2 计算机动画在电影特技中的应用
计算机动画的一个重要应用就是制作电影特技 可以说电影特技的发展和计算机动画的发展是相互促进的。1987年由著名的计算机动画专家塔尔曼夫妇领导的MIRA 实验室制作了一部七分钟的计算机动画片《相会在蒙特利尔》 再现了国际影星玛丽莲•梦露的风采。1988年,美国电影《谁陷害了兔子罗杰》 (Who Framed Roger Rabbit?)中二维动画人物和真实演员的完美结合,令人膛目结舌、叹为观止 其中用了不少计算机动画处理。1991年美国电影《终结者II:世界末日》展现了奇妙的计算机技术。此外,还有《侏罗纪公园》(Jurassic Park)、《狮子王》、《玩具总动员》(Toy Story)等。
3.3 国内情况
我国的计算机动画技术起步较晚。1990年的第11届亚洲运动会上,首次采用了计算机三维动画技术来制作有关的电视节目片头。从那时起,计算机动画技术在国内影视制作方面得到了讯速的发展, 继而以3D Studio 为代表的三维动画微机软什和以Photostyler、Photoshop等为代表的微机二维平面设计软件的普及,对我国计算机动画技术的应用起到了推波助谰的作用。
计算机动画的应用领域十分宽广 除了用来制作影视作品外, 在科学研究、视觉模拟、电子游戏、工业设计、教学训练、写真仿真、过程控制、平面绘画、建筑设计等许多方面都有重要应用,如军事战术模拟
4 科学计算可视化
科学计算的可视化是发达国家八十年代后期提出并发展起来的一门新兴技术,它将科学计算过程中及计算结果的数据转换为几何图形及图象信息在屏幕上显示出来并进行交互处理,成为发现和理解科学计算过程中各种现象的有力工具。
1987年2月英国国家科学基金会在华盛顿召开了有关科学计算可视化的首次会议。会议一致认为“将图形和图象技术应用于科学计算是一个全新的领域” 科学家们不仅
需要分析由计算机得出的计算数据,而且需要了解在计算机过程中数据的变化。会议将这一技术定名为“科学计算可视化(Visualization in Scientific Computing)”。科学计算可视化将图形生成技术图象理解技术结合在一起, 它即可理解送入计算机的图象数据.也可以从复杂的多维数据中产生图形。它涉及到下列相互独立的几个领域:计算机图形学、图象处理、计算机视觉、计算机辅助设计及交互技术等。科学计算可视按其实现的功能来分, 可以分为三个档次:(1)结果数据的后处理;(2)结果数据的实时跟踪处理及显示;(3)结果数据的实时显示及交互处理。
4.1 国外科学计算可视化现状
(1)分布式虚拟风洞
这是美国国家宇航局(Ames)研究中心的研究项目,包括连接到一台超能计算机上的两个虚拟屏幕。这一共享的分布式虚拟环境用来实现三维不稳定流场。两个人协同工作, 可在一个环境中从不同视点和观察方向同一流场数据。
(2)PHTHFINDER
这是美国国家超级计算机应用中心(NCSA)的研究项目. 是在交互分布环境下研究大气流体的软件。PHTHFINDER通过多个相联系的模型来研究暴风雨。
(3)狗心脏CT数据的动态显示
这也是NCSA的研究项目,它利用远程的并行计算资源.用体绘制技术实现CT扫描三维数据场动态显示。其具体内容是显示一个狗的心脏跳动周期的动态图像。
(4)燃烧过程动态模型的可视化
这是美国西北大学的研究项目.可以显示发生在非烧热的气体燃烧中复杂的空问瞬态图象。火焰位于两个同心圆柱之间.可燃混合气体从内圆柱注入,燃烧所生成的物质通过外圆柱送出。
(5)胚胎的可视化
依利诺大学芝加哥分校研制了一个在工作站和超级计算机上实现的可视亿应用软件。其内容是对一个七周的人类胚胎实现交互的三维显示, 是由卫生和医学国家博物馆所得到的数据重构而成的。这一项目表示了对人类形态数据实现远程访问和在网络资源中实现分布计算的可能性。最近美国还将做整个人体的可视化, 他们将两个自愿者(一男一女)做成了切片,男的被切了1780片, 厚度约1毫米,女的被切了5400片, 厚度约O.3毫米,数据量很大。概括起来有以下几点:
(1)科学计算可视化技l术在美国的著名国家实验室及大学中已经从研究走向应用,应用范围涉及天体物理、生物学、气象学、空气动力学、数学、医学图象等领域。科学计算可视化的技术水平正在从后处理向实时跟踪和交互控制发展。
(2)美国在实现科学计算可视化时, 已经将超级计算机、光纤高速网、高性能工作站及虚拟环境四者结合起来,显示了这一领域技术发展的重要方向。就三维数据场的显示算法而言,当数据场分布密集而规则时(如cT扫描数据)多采用体绘制技术,这种算法效果好,但计算费时。对于数据场分布稀疏,或分布不规则的应用领域, 如天体物理、气象学多采用构造中间几何图象的方法,这种方法生成图象速度快,较易作到实时交互处理。
5 虚拟现实
“虚拟现实”(Virbual ReMity)- 词是由美国喷气推动实验室(VPL)的创始人拉尼尔(Jaron Lanier)首先提出的 在克鲁格(Myren Kruege)70年代中早期实验里.被称为 人工现实”(Artificial reality);而在吉布森(William Gibson)l984 年出版的科幻小说Neuremanccr里,又被称为“可控空间”(Cyberspaee)。虚拟现实, 也育人称之为虚拟环境(Virtual Environment)是美国国家航空和航天局及军事部门为模拟而开发的一门高新技术 它利用计算机图形产生器,位置跟踪器,多功能传感器和控制器等有效地模拟实际场景和情形,从而能够使观察者产生一种真实的身临其境的感觉虚拟环境由硬件和软件组成,硬件部分主要包括:传感器(Sensors)、印象器(Efeeter)和连接侍感器与印象器 产生模拟物理环境的特殊硬件。利用虚拟现实技术产生虚拟现实环境的软件需完成以下三个功能:建立作用器(Actors)以及物体的外形和动力学模型:建立物体之间以及周围环境之间接照牛顿运动定律所决定的相互作用;描述周围环境的内容特性
5.1 虚拟现实技术的应用
5.1.1用于脑外科规划的双手操作空间接口工具
最近,美国弗尼亚大学推出了一种能用于脑外科规划的被称为Netra的双手操作空间接口工具 根据脑外科医生的工作环境和习惯,该系统采用一种外形象人头的控制器。脑外科医生可以根据他们的职业习惯,通过转动外形象人头的控制器, 来方便地观察人脑的不部位, 同时通过右手控制面板的平面来控制人脑的剥面的扫描井能根据CT或强磁共振图像所产生的主体脑模型显示所需得到观察视点着色后的真实图像
5.1.2虚拟环境用于恐高症治疗
英国研制的一个虚拟现实系统可以产生以下虚拟环境:① 透明的玻璃电梯,② 高层建筑阳台.@位于蛱咎之上的索桥。为了增加真实的感觉,患者除了佩戴能够产生三维立体景象的头盔式显示器外,还必须站在一个特制的框架内。调节电梯、.阳台和索桥的高度就可以产生不同程度的刺激。
5.1.3虚拟风洞
德国信息技术国家研究中心的克鲁格等人建立了一个所谓的“虚拟风嗣 ,用以代替风洞实验(因风洞实验成本高,且实验难以控制)。在虚拟风洞中,其模拟的数据来自超级计算机或高性能工作站上运行的有限元程序。利用虎拟风洞,观测者通过佩戴液晶开关眼镜可以方便地对于给定的点和线进行观察,而且还可以通过放大的方式进行更细致的研究,大大方便了人们对于物体动力中特性的研究。
5.1.4封闭式战斗作战训练器
封闭式战斗作战训练器(CCTT)是马斯塔格利等人为美军研制的用于坦克和机械化步兵在实际地形上进行演习的模拟装置。它与通常的虚拟环境和模拟器不同,它需要建立的是适用于军队训练的大规模复杂的虚拟环境。
5.1.5虚拟现实技术在建筑设计中应用
虚拟现实技术还被广泛用于建筑设计。克鲁格等将他们设计的未来建筑显现在他们发明的虚拟工作平台上,建筑学家们聚集在一起透过所佩戴的液晶眼镜,可以看到设计的立体建筑,井方便地增添或移去建筑的一部分或其它物体。同时也可以通过数据手套来设置不同的光源.模拟不同时间的日光和月光.观察在不同光线下所设计建筑的美感以及与整个环境的协调性。
总之.虚拟现实技术是一门多学科交叉和综合集成的新技术。因此, 它的发展将取决于相关科学技术的发展和进步 虚拟现实技术最基本的要求就是反映的实时性和场景的真实性。但一般来说,实时性与真实性往往是相互矛盾的。
5.2 多通道用户界面
用户界面是计算机系统中人与计算机之间相互通讯的重要组成部分。八十年代以WIMP(窗口、图符、菜单、鼠标)为基础的图形用户界面(GUD极大地改善了计算机的可用性、可学性和有效性,迅速代替了命令行为代表的字符界面,成为当今计算机用户界面的主流。以用户为中心的系统设计思想.增进人机交互的自然性,提高人机交互的效率和带宽是用户界面的研究方向。于是提出了多通道用户界面的思想,它包括语言、姿势输入、头部跟踪、视觉跟踪、立体显示、三维交互技术、感觉反馈及自然语言界面等。可以这样说人体的表面就是人机界面。人体的任何部分都应成为人机对话的通道。虚拟现实显示是关键所在,这不仅要求软件来实现,更主要的是硬件上的实现。概括起来虚拟现实的人机交互通道可分为两个方面:主要的感觉通道和主要作用通道。多通道用户界面强调:
(1)多个交互通道,如眼一语言一手势等。
(2)交互的双向性.如果每个通道兼有输入/输出
(3)交互不一定是在同一通道中完成.例如, 眼和耳都可以接受信息.但有明显的区别。眼永远是主动的, 即主动地去获取信息,耳永远是被动的,有些信息不管你愿不愿听,总要输到耳朵中,这就要求在具体的交互中具体选择交互通道。计算机图形学中各个领域的发展各有各自的特点, 但总起来说是以虚拟现实为导向
和目的的。虚拟现实的发展要求必将带动计算机图形学各学科的发展. 同样虚拟现实的发展也将依赖于其他学科的发展,计算机图形前景诱人。形势逼人(我国还比较落后),但通过努力还是可以缩短差距的。

网友(2):

汉字图形窗口界面设计方法及函数编程技巧

摘要 该文讨论了汉字图形窗口界面设计的一般方法,给出了窗口生成,窗口管理,菜单生成与管理,鼠标与键盘管理等实现的子函数,并给出了部分C语言源程序。这些函数的组合可以设计出丰富的汉字图形窗口界面。

一、图形窗口设计函数
主要包括窗口生成与管理函数,如窗口生成,窗口打开,窗口关闭,窗口删除等。

1.窗口结构定义方法
typedef struct gwin {
int x0,y0,x1.y1; /*窗口位置及大小*/
int Border; /*窗口边框类型*/
int Wcolor; /*窗口背景颜色*/
char Wstate; /*窗口状态标志*/
char far *Buffer; /*指向窗口缓冲区指针*/
}GWIN;
在GWIN中,Border为窗口的边框属性,可以根据不同要求设计出多种边框类型业,以美化窗口界面。

2.窗口子函数
窗口生成子函数:Gwin * GwinCreate(x0,y0,x1,y1,border,colo
r)
int x0,y0,x1,y1; /*窗口位置及大小*/
BorderMode border; /*窗口边框类型*/
int color; /*窗口背景颜色*/
窗口显示子函数:GwinDisplay(GWIN *w)
w为用GwinCreate生成的窗口指针,即此函数画出窗口。
窗口打开子函数:GwinOpen(GWIN * w)
此函数调用GwinDisplay来显示窗口,并存储屏幕。
窗口关闭子函数:GwinClose(GWIN * w)
此函数关闭已打开的窗口,恢复屏幕,但此窗口数据还保存,可再次打开。
窗口删除子函数:GwinKill(GWIN * w)此窗口彻底清除窗口,不可重新打开。

3.部分程序
下面给出实现上述功能的C语言程序
/*Windows Create*/
#include
#include
#include
#include
#include
#include
#define CR 0x0d
#define Esc 0x1b
#define Left 0x4b
#define Right 0x4d
#define Up 0x4d
#define Down 0x50
#define OPEN 1 /*窗口为打开状态*/
#define CLOSE 0 /*窗口为关闭状态*/
#define MOUSE 0 /*是否有鼠标移动*/
/*定义窗口边框类型*/
typedef enum {
NoBorder,/*普通窗口,系统默认值*/
TBorder,/*窗口有凸边框类型*/
WBorder,/*窗口有凹边框类型*/
TWBorder,/*窗口有凸凹边框类型*/
WTBorder,/*窗口有凹凸边框类型*/
CBorder,/*窗口有汉字边框类型*/
... /*其它窗口类型*/
}BorderMode;
GWIN * GwinCreate(x0,y0,x1,y1,border,color)
int x0,y0,x1,y1;
BorderMode border;
int color;
{
GWIN *w;
w=malloc(sizeof(GWIN));
w->x0=x0;
w->y0=y0;
w->x1=x1;
w->y1=y1;
if(border==NoBorder)w->Border=NoBorder;
if(border==WBorder)w->Border=WBorder;
if(border==TBorder)w->Border=TBorder;
if(border==TWBorder)w->Border=TWBorder;
if(border==WTBorder)w->Border=WTBorder;
if(border==CBorder)w->Border=CBorder;
w->Wcoloe=color;
w->Buffer=NULL;
return(w);
}
void GwinDisplay(GWIN * w)
{
if(w->Border==NoBorder)DrawGwin(w,NoBorder);
if(w->Border==WBorder)DrawGwin(w,WBorder);
if(w->Border==TBorder)DrawGwin(w,TBorder);
if(w->Border==WTBorder)DrawGwin(w,TWBorder);
if(w->Border==TWBorder)DrawGwin(w,TWBorder);
if(w->Border==CBorder)DrawGwin(w,CBorder);
}
void GwinOpen(GWIN * w)
{
if(w->Wstate==OPEN)return 0;
w->Buffer=(char far *)malloc((unsigned int))
-imagesize(w->x0,w->y0,w->x1,w->y1)
-getimage(w->x0,w->y0,w->x1,w->y1,w->Buffer);
w->Wstate=OPEN;
GwinDisplay(w);
}
void GwinClose(GWIN * w)
{
if(w->Wstate==CLOSE)return 0;
-putimage(w->x0,w->y0,w->Buffer,-GPSET);
free((char far *) w->Buffer);
w->Wstate=COLSE;
}
void GwinKill(GWIN * w)
{
if(w->Wstate==OPEN)GwinClose(w);
free(w);
}

二、菜单窗口界面生成与管理子函数

1.菜单结构定义说明
typedef struct g

menu{
GWIN * w; /*含有菜单的窗口*/
char * * chstring;/*菜单中汉字串指针*/
int xnum;/*水平方向菜单分布项*/
int ynum;/*垂直方向菜单分布项*/
int hzcolor/*汉字颜色*/
int mnow /*光标位置*/
int mtotal/*菜单总个数*/
}GMENU;

2.菜单生成与管理子函数
菜单生成子函数:GMENU * MenuCreate(x,y,xnum,ynum,border,h
zcolor,bcolor,chstring)
int x,y;/*菜单左上角位置*/
int xnum,ynum;/*菜单在X,Y方向个数*/
BorderMode border;/*菜单边框类型*/
int hzcolor; /*汉字颜色*/
int bcolor; /*菜单背景颜色*/
char * * chstring; /*汉字串*/
菜单打开子函数:MenuOpen(GMENU * m)
m为用MenuGreate生成的菜单直针。
菜单驱动子函数:MenuDrive(GMENU * m)
此函数提供用鼠标或键盘选择菜单项的方法。
菜单关闭子函数:MenuClose(GMENU *m)
此函数关闭已打开的菜单,恢复屏幕,但此菜单数据还保存,可再次打开。
菜单删除子函数:MenuKill(GMENU * m)
此菜单被彻底清除,不可重新打开。

3.实现上述功能子函数的源程序代码
GMENU * MenuCreate(x,y,xnum,ynum,border,hzcolor,bcolor,c
hstring)
int x,y,xnum,ynum;
BorderMode border;
int hzcolor,bcolor;
char * * chstring;
{
GWIN *w,GMENU *m;
m=malloc(sizeof(GMENU));
m->=chstring=chstring;
m->=xnum=xnum;
m->=ynum=ynum;
m->=hzcolor=hzcolor;
m->=mnow=1
m->=mtotal=Number_of_Menu(m->=chstring);
w=(GWIN *)GwinCreate(x,y,x+xnum * Longest(chstring),
y+(ynum-1)+C0,border,bcolor);
m->=w=w
return m;
}
其中,Number_of_Menu(string)为求串中菜单项个数的函数,Longest(string)为求串中最长项长度的函数。
其它子函数可参照窗口函数设计出,此处限于篇幅,不再给出。

三、下拉式菜单设计方法
有了第一,第二节的窗口设计及菜单设计函数,可以很方便的定义出下拉式及弹出式菜单,菜单可以层层嵌套,主子关系及热键可以自由定义,有了窗口及菜单函数,可以组合设计出风格迥异的应用程序界面。本节的子函数包括:根菜单生成(主菜单)、下拉式菜单生成、菜单连接、菜单初始化、菜单驱动、菜单关闭、菜单删除。

1.下拉式菜单结构定义方法
typedef struct pmenu{
GMENU * m;/*定义菜单*/
int pstate; /*下拉式菜单状态*/
int pid; /*菜单标识码*/
struct pmenu *Father; /*定义父菜单*/
struct pmenu *Son /*定义子菜单*/
char hotkey[MaxSon+1];/*定义热键*/
}PMENU;

2.下拉式菜单生成与管理子函数
根菜单生成子函数:PMENU *Proot(pid,x,y,border,hzcolor,bco
lor,chstring)
int pid;/*根菜单标识码,一般为000*/
int x,y;/*菜单在X,Y方向个数*/
BorderMode border;/*菜单边框类型*/
int hzcolor;/*汉字颜色*/
int bcolor;/*菜单背景颜色*/
char * * chstring;/*汉字串*/
下拉式菜单生成子函数:PMENU *Pcreate(pid,x,y,border,hzcol
or bcolor,chstring
参数含义同上,pid值一般取为100,200,300等,利用此函数可生成普通弹出式菜单。
菜单连接子函数:void Plink(PMENU * p1,int n,PMENU * p2)
此函数建立两个菜单p1,p2之间的主次关系,p1为父菜单,p2为子菜单,执行此菜单,则把p2挂在了p1的第n个菜单项上。
下拉式菜单初始化子函数:Pint();
菜单关闭子函数:Pclose();
菜单删除子函数:Pkill();
菜单中定义热键子函数:HotKey(PMENU *p1,int n,int Vascii);
PMENU *p1;/*下拉式菜单p1*/
int n;/*菜单p1中菜单个数*/
int Vascii;/*定义热键的ASCII码值*/
利用此函数可定义弹出式菜单p1中任意项n的键盘热键,该键的ASCII码值为Vascii。

3.实现上述功能子函数的源程序代码
PMENU *RP,*CP;
pmenu * Proot(pid,x,y,border,hzcolor,bcolor,chstring)
int pid,x,y;
BorderMode border;
int hzcolor,bcolor;
char * * chstring;
{
PMENU *p;
int i;
RP=CP=malloc(sizeof(PMENU));
p->pstate=CLOSE;
p->pid=pid;
p->m=MenuCreate(x,y,Num_of_Menu(chstring),1,border,hzc
olor,bcolor,chstring);
p->father=NULL;
for(i=1;i{
p->Son[i]=NULL;
p->hotkey[i]=0;
}
return(p);
}
void Plink(PMENU *p1,int n,PMENU *p2)
{
p1-Son[n]=p2;
p2->Father=p1;
}
其它子函数可参照菜单函数设计出,此处限于篇幅,不再给出。

四、其它辅助函数
计算菜单项个数的函数
int Number_Of_Menu(char * * chstring)
{
int i;
for(i=0;chstring[i]!=NULL;i++);
return(i);
}
键盘与鼠标处理子函数
int Get_Key_Mouse(int *x,int *y)
此函数用来同时接收键盘及鼠标,有按键时返回该键的ASCII码,有鼠标操作时返回鼠标的X,Y座标,提供给程序作处理。

仅供参考,请自借鉴。

希望对您有帮助。

网友(3):

计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。

简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的,如工程图、等高线地图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。

计算机图形学一个主要的目的就是要利用计算机产生令人赏心悦目的真实感图形。为此,必须建立图形所描述的场景的几何表示,再用某种光照模型,计算在假想的光源、纹理、材质属性下的光照明效果。所以计算机图形学与另一门学科计算机辅助几何设计有着密切的关系。事实上,图形学也把可以表示几何场景的曲线曲面造型技术和实体造型技术作为其主要的研究内容。同时,真实感图形计算的结果是以数字图象的方式提供的,计算机图形学也就和图象处理有着密切的关系。

图形与图象两个概念间的区别越来越模糊,但还是有区别的:图象纯指计算机内以位图形式存在的灰度信息,而图形含有几何属性,或者说更强调场景的几何表示,是由场景的几何模型和景物的物理属性共同组成的。

计算机图形学的研究内容非常广泛,如图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等

网友(4):

基于VxWorks的bootrom代码改进

要:在Wind
Rivet公司开发的VxWorks嵌入式操作系统平台上,改进交换机产品bootrotn软件的实现方式;给出实现方法和改进目的,为BSP开发人员提供一套全新的bootrom实现方案。
关键词:VxWorks
嵌入式操作系统
BSP
bootrotn软件
分类号:
TP311.1文献标识码:文章编号:栏目信息:技术纵横

网友(5):

去搜一下吧。
在这里很难回答的。