计算机图形学备课笔记_第1页
计算机图形学备课笔记_第2页
计算机图形学备课笔记_第3页
计算机图形学备课笔记_第4页
计算机图形学备课笔记_第5页
已阅读5页,还剩154页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE159第一章概述重点:掌握计算机图形学研究的内容、应用领域以及图形硬件和软件系统。难点:理解光栅扫描显示器和随机扫描显示器的区别以及彩色显示机理。课时安排:授课2学时。

计算机图形学(ComputerGraphics)是随着计算机技术的发展而发展起来的一门新兴学科。计算机图形学研究怎样通过计算机来产生图形(1)专题图件:地形图、地貌图、资源分布图、旅游资源图、土地利用现状图、管网分布图等;

(2)照片、三维逼真图形等;

(3)实体的视图,如:机械零件的正视图、侧视图等;

(4)抽象概念的形象表示:计划图、饼图、统计曲线、流程图等。国际标准化组织(ISO)对计算机图形学的定义计算机图形学是研究通过计算机将数据转换为图形,并在专门的设备上输出的原理、方法和技术的学科。与计算机图形学密切相关的几门学科是:1、图像处理(ImageProcessing)图像处理利用计算机对图形和图像进行分析处理,继而再现图像。图形(图像)信息输入计算机中,按照不同的应用要求,计算机对图像进行各种各样的分析和处理。

例如,进行图像的存储、压缩、增强(突出某些特征)、复原(使模糊图像清晰)、分割、重建、编码、传输等等,最后把经过加工处理后的结果重新输出。应用实例:工业中射线探伤、人体的CT扫描、卫星遥感以及资源勘测。现在图像处理正从二维处理朝着三维图像生成、立体成像、多种传输媒体等方向发展。2、模式识别(PatternRecognition)图像的模式识别所研究的问题与计算机图形学所研究的问题是互逆的。模式识别是由图像来获得对图像本身的描述。它是以图像为依据,将图像变换成数据、符号或者是抽象的图。例如,自动分检信封上的邮件编码、文本自动阅读装置、还有地图符号的识别,都是先由扫描得到图像,然后经识别还原为图形或字符。3、计算几何(ComputationalGeometry)计算几何则着重讨论几何形体在计算机内的表示、分析和综合,研究怎样方便灵活地建立几何形体的数学模型,提高算法的效率,在计算机内如何更好地存储和管理这些模型等。它的研究内容包括曲线曲面的表示、生成、拼接和造型、三维立体造型、离散数据插值等等。计算机图形学与其他学科的关系:如下图所示,计算机图形学与图像处理、模式识别、计算几何这几门相关学科之间正在不断相互渗透、相互沟通,其学科界线也变得模糊起来。例如,计算机图形学课程中往往要介绍参数曲线、曲面的数学表示;工程图扫描输入后要先用图象处理技术提取画面的特征信息,然后再用模式识别技术生成矢量形式的各种几何元素。图形系统的任务:1.1计算机图形学的研究内容计算机图形学的研究内容涉及到用计算机对图形数据进行处理的硬件和软件两方面的技术,以及与图形生成、显示密切相关的基础算法:1、二维图形元素的生成算法点、直线、圆、弧、规则曲线、自由曲线、文本等图元的生成。2、二维图形的基本操作和图形处理算法对图形的平移、缩放、旋转、镜像、错切等操作,此外还包括二维图形的裁剪、多边形填充以及二维图形的布尔运算(并、交、差)等。3、二维图形的输入输出用图形输入设备实现人机交互及用户接口技术。4、三维几何造型技术包括基本体素的建立与生成,规则曲面与自由曲面的构造,以及三维形体之间的布尔运算等。5、真实感图形的生成算法三维图形的消隐算法、光照模型的建立,阴影及彩色浓淡图的生成算法。6、科学计算可视化技术这是20世纪90年代计算机图形学领域的前沿课题。研究的是,将科学计算中大量难以理解的数据通过计算机图形显示出来,从而加深人们对科学过程的理解。例如,有限元分析的结果,应力场、磁场的分布,各种复杂的运动学和动力学问题的图形仿真等。在大学本科阶段,应着重了解前面三个内容,而后面三个涉及三维图形的内容可留待研究生阶段去研究。计算机图形学正以很快的速度向前发展,当前这一领域研究的前沿课题有:(1)图形软件与开发环境的标准化(2)提高算法的可靠性和效率消隐算法、真实感彩色图像、明暗图、体素拼合中的曲面求交和拓扑处理等问题上。(3)用并行处理技术提高真实感图像的生成速度如采用多处理器,将一幅光栅图像的512×512或更多个象素用几十个甚至几百个处理器并行计算,可以明显提高图像的生成速度。□(4)探讨自然景象的模拟方法采用纹理映射、分维技术、粒子系统等方法再现景物表面的色彩和纹理细节,体现山峦的粗糙岩面,重现云、火、水等飘忽不定的景色。(5)科学可视化1.2计算机图形学的发展历史1950年,美国麻省理工学院(MIT)研制出第一台图形显示器。作为旋风1号(WhirlWind1)计算机的输出设备。利用这台显示器在计算机的控制下第一次显示了一些简单图形。随后,一些公司和研究所也陆续地研制了绘图仪等一些简单的图形设备。但这些设备仅仅具有图形输出功能,因此这时的图形学只能算“被动”的图形学。随后,由麻省理工学院林肯实验室主持研制的SAGE空中警戒雷达系统,成功地把雷达波形转换成图形在显示器上显示出来。指挥员可以通过光笔与系统交互,获取某地区更详细的信息或发出命令。这个系统可以说是交互式计算机图形系统的雏形,它预示着交互式图形生成技术的诞生。60年代是计算机图形学兴起和确立的年代。1962年,美国麻省理工学院的IvenSutherland发表了题目为“Sketchpad:一个人机通信的图形系统”的博士论文,在论文中他首次使用了“计算机图形学”(ComputerGraphics)这个术语,指出交互式计算机图形学是一个有生命力、有前途和振奋人心的研究领域,从而确立了计算机图形学作为一个崭新的科学分支的地位。他在论文中所提出的一些基本概念和技术,如交互技术、分层存储符号的数据结构等至今还在广为使用。与此同时,美国、英国、法国在汽车和飞机制造领域对计算机图形学开展了大规模研究。在计算机辅助设计(CAD)和计算机辅助制造(CAM)中,一些相关的科研项目、商品化产品纷纷出现。但是,由于图形硬件设备非常昂贵,并且基于图形技术的应用相对较少,所以直到80年代初,图形学仍然是一个较小的专业化学科。随后,情况发生了变化,由于大规模集成电路技术的快速发展,计算机硬件性能不断提高,体积缩小,价格降低,特别是廉价的图形输入输出设备和大容量存储介质的出现,使得以小型机、微机、图形工作站为基础的图形系统进入市场并成为主流,如IBM-PC、苹果机等微机和Apollo、Sun等工作站。80年代,是计算机图形系统迅速推广应用的年代。计算机图形软件功能开始部分地由硬件实现,尤其是微机的大面积推广,进一步拓宽了图形学的研究和应用,三维计算机图形学的国际标准PHIGS和GKS-3D的颁布,为研制通用的图形系统提供了良好的基础。90年代,随着多媒体概念的提出计算机图形学已成为计算机系统必不可少的一个组成部分,并且迅速投入使用中。同时,随着面向对象的程序设计语言的发展,也提出了面向对象的计算机图形系统。作为计算机图形系统的一个重要组成部分——图形显示器,随着计算机图形学的确立和发展也经历了从矢量显示器、存储管显示器到光栅显示器的发展过程。图形输入设备也在发展,出现了:拇指轮、操作杆、跟踪球、光笔、鼠标、触摸屏、数据手套、数字化仪、扫描仪等输入设备。和图形硬件一样,图形软件也得到很大的发展,各种图形算法、图形标准、图形数据结构等逐渐成熟并投入使用,使计算机图形学成为一门成熟的学科。1.3计算机图形学的应用领域图形比文字更直观、逼真且信息载荷量大,随着计算机图形学的发展,以及计算机软、硬件性能的提高和成本下降,用计算机处理图形的领域越来越广泛,下面是一些主要的应用领域。一、计算机辅助设计与制造(CAD/CAM)这是一个最广泛、最活跃的应用领域,在机械、建筑、汽车、飞机、造船、电子等领域有着广泛的应用。如机械结构和零部件的设计,土木建筑工程及其图纸的设计,汽车、飞机、轮船的外形设计,集成电路、印刷线路板的设计等。过去在这些设计工作中,用的是绘图板加丁字尺的传统设计方法,现在正迅速地被CAD技术所代替。使用CAD技术后,不仅提高了设计效率,缩短了设计周期,改善了设计质量,降低了设计成本,而且可以为后续工序的计算机辅助制造(CAM)建立起CAD数据库,使CAD/CAM联成一体,为生产自动化奠定基础。CAD/CAM是高新技术,是先进的生产力,它已经并将进一步给人类带来巨大的影响和利益。现在,CAD技术的水平已成为衡量一个国家工业技术水平的重要标志。二、科学计算可视化用图形来表示大量数据计算的结果或中间过程。例如:

·科技工作者需要认真分析大量的计算结果以确定一个系统的描述;

·商业主管需要分析大量的统计数据以做出对未来商业行为的决策;

·医生需要面对大量的CT数据以确定病人体内是否发生病变及何处发生病变;

·气象人员需要处理气象卫星传回的大批数据以绘出未来一段时间内的天气变化趋势图。分析处理这些大批数据是艰难和枯燥的,但如果应用计算机图形处理技术建立数据与图形之间的关系并将它们以图形的形式在屏幕上显示出来,则使用者很容易观察其中的各种现象并找出变化规律。这种研究如何将来自科学、工程、医学等领域的抽象数据用图形表示的学科称为科学计算可视化。可视化技术发展很快,已广泛应用于流体力学、有限元分析、医学、遥感等领域。三、地理信息系统与制图地理信息系统是建立在地理图形之上的关于人口分布、矿藏分布、森林覆盖、土地利用、旅游资源、海洋地理、地形地貌、山川河流分布、区域规划、城市交通、管线管网等综合信息管理系统。目前,它在发达国家中已得到广泛应用,我国也对其开展了广泛的研究与应用,全国数十所高校也纷纷设置地理信息系统专业。在地理信息系统中,计算机图形技术被用来产生高精度的上述各种资源的专题图,并为管理者提供有效的决策和帮助。四、事务管理和办公自动化无论是企业还是事业行政管理中,都存在着大量的图表,如作业进程表、生产产量表、库存表、销售统计图、生产计划表,以及统计分析方面的各种图表。这些图表都可以用计算机图形技术产生的直方图、饼图和折线图来表示。在办公自动化方面,各国都非常重视。办公自动化系统可以从联网的数据库中,取出所需要的数据,用清晰明了的图表在屏幕上显示或在打印机、绘图仪上输出。五、虚拟现实系统虚拟现实又称为虚拟环境,是指由计算机实时生成一个虚拟的三维空间。这个空间可以是小到分子、原子的微观世界,或是大到天体的宏观世界,也可以是类似于真实社会的生活空间。用户可以在这个三维空间中“自由”地走动,随意地观察,并可以通过一些特殊的设备与所处的虚拟景物进行交互操作。交互是多通道的、自然的,用来传递的信息可以是某个操作、一个手势、一个眼神,也可以是一个表情等。在此环境中,用户看到的是由计算机生成的逼真图像,听到的是虚拟环境中的声音,身体可以感受到虚拟环境所反馈的作用力,由此产生身临其境的感觉。虚拟现实技术主要研究用计算机模拟三维图形空间,并使用户能够自然地与该空间进行交互。在模拟训练中,可以用来训练飞机驾驶员操纵飞机飞行、训练宇航员驾驶登月舱登月。在模拟训练中,驾驶员的操作实时地变换成三维场景并投影在球形房间的内壁上,以模拟空中飞行的环境和状态,同时配上模拟飞行的音响效果,使驾驶员在训练驾驶舱内所见到的外部景物如同在真实的空中一样。这样的训练,既安全又方便,且节省了训练费用。目前,该技术已在航空航天、医学、教育、艺术、建筑等领域得到初步的应用。六、过程控制和指挥系统将各种实时过程的重要参数,如火箭的运行状态,炼油厂、发电厂和电力系统送来的压力、温度、电压、电流等数据传送到计算机,用图形方式进行显示,管理人员对图形进行监控,并对异常情况作出调整。此外,现在大量的指挥系统,军用指挥、铁路调度、机场指挥等系统,也用图形进行监视与控制。七、计算机动画为了产生连续的动画,每秒至少需要24帧画面。因而,一部两小时的动画片就需要十几万张画面,如果用传统的方式手工绘制,工作量是巨大的。首先要由原画设计师创作出人物、场景的关键画面,而两个关键画面之间的变化过程由其它动画工作者逐张完成。中间画的张数取决于人物动作变化的幅度及运动规律,要使动作过渡得平滑自然。60年代制作动画片《大闹天宫》时,就花了几十位动画工作者近两年的时间。如果用计算机图形技术来制作,一方面可以利用造型工具创作出形象逼真的演员、场景,另一方面可以在关键画面之间利用图形变换技术自动插入中间画面。这样大大提高了动画制作的质量和效率。现在,基于计算机图形技术的计算机动画软件3DMAX、ComputerAnimation被广泛用于电视广告、节目片头、科教演示、电子游戏等的制作。1.4图形硬件设备与一般计算机系统一样,计算机图形系统也是由硬件和软件两部分组成。硬件包括主机、输入设备和输出设备。输入设备通常为键盘、鼠标、数字化仪、扫描仪和光笔等。输出设备则为图形显示器、绘图仪和打印机。这里主要介绍图形输出设备,而图形输入设备的内容放在交互技术那一章去介绍。1.4.1显示设备图形系统一般使用视频显示器作为基本的输出设备,目前大部分视频显示器的操作是基于标准的阴极射线管(CRT:CathodeRayTube)设计的。此外,还有液晶显示器和等离子板显示器等,它们体积小,功耗少,主要用于便携式电脑上。一、刷新式CRT刷新式CRT结构示意图如下图所示。CRT由五部分组成:电子枪、加速电极、聚焦系统、偏转系统和荧光屏,这五部分都封装在真空管内。

刷新式CRT结构示意图电子枪由灯丝、阴极和控制栅极组成。灯丝加热阴极,阴极表面向外发射自由电子,控制栅控制自由电子发出的强弱。发出的电子在加速电极的作用下,形成一股高速的电子束,在到达屏幕的途中,被聚焦系统(电子透镜)聚焦成很细的电子束,再由偏转系统产生偏转电场(或磁场),使得电子束左右、上下偏转,从而控制荧光屏上的光点落在指定的位置上。荧光屏上涂有一层荧光粉,受到电子束打击时会发出荧光。当打击结束后,荧光仍会保持一段时间才消失,这种现象称为余辉,荧光亮度随着时间按指数衰减,为了使人们看到一个稳定而不闪烁的图形,整个画面必须在每秒钟内重复显示许多次,这也称为屏幕刷新。CRT上用的荧光物质有多种,除颜色不同外,荧光物质的主要差别在于它们的余辉保持时间,短余辉荧光层需要较高刷新速度,才能保证屏幕图像不闪烁。短余辉荧光层用于动画,而长余辉荧光层则用来显示高复杂程度的静态图形。对于图形显示CRT,通常采用余辉时间为10μs~60μs的荧光材料。二、彩色CRT显示器CRT显示器利用能发射不同颜色的荧光物质的组合来显示彩色图形。组合不同荧光物质的发射光,便能生成一定范围的彩色。用CRT产生彩色显示的两种基本技术是电子束穿透法和荫罩法。电子束穿透法用于随机扫描显示器。两层荧光层,通常是一红一绿,涂覆在CRT屏幕的内层,而显示的颜色取决于电子束穿透进荧光层的深浅。慢速的电子束只激活外面的红色层,快速的电子束穿过红色层并激活里面的绿色层。而中速的电子束,通过红、绿光发射的组合,来生成另外的两种颜色:橙色和黄色。电子束穿透法是随机扫描显示器生成彩色的廉价途径,但只可能有四色,而且图形质量不如其它方法。荫罩法常用于光栅扫描系统,因为它能产生的彩色范围比电子束穿透法宽广得多。在每个象素位置上分布着呈三角形排列的三个荧光彩色点,三个荧光点分别发射红光、绿光和蓝光。

红、绿、蓝三个荧光点呈三角形排列这样的彩色CRT有三支电子枪,分别与三个荧光点相对应,即每支电子枪发出的电子束专门用于轰击某一个荧光点。而荫罩板被安装在紧靠荧光涂层的地方,板上有很多小孔,每个小孔与一个象素(即三个荧光点)相对应。三个电子束经聚焦偏转后穿过荫罩板上的小孔,激活该小孔对应的三个荧光点。由于三个荧光点很小并充分靠近,我们观察到的是它们混合颜色的一个光点,即象素。屏幕上的荧光点、荫罩板上的小孔和电子枪被精确地安排处于一条直线上,使得由某一电子枪发出的电子束只能轰击到它所对应的荧光点上。这样,只要调节各电子枪发出电子束的强弱,即可控制各象素中三个荧光点所发出的红、绿、蓝三色光的亮度。于是我们可以根据彩色中所含红、绿、蓝三色的数量,以不同的强度激励三个荧光点,从而可以产生范围很广的彩色。假如每个电子枪发出电子束的强度有256个等级,则该显示器能显示16兆种颜色,即:28×28×28=224。能显示16兆种颜色的显示系统叫做真彩色显示系统。

CRT产生彩色的工作原理三、随机扫描显示器随机扫描显示器中,电子束可以在任意方向上自由移动,按照显示命令用画线的方式绘出图形,因此也称矢量显示器。在随机扫描显示系统中,图形的定义以矢量画线命令的形式存放在显示文件中,所以依靠显示文件对屏幕图形进行刷新。应用程序若要修改屏幕上的图形,则要修改显示文件中的某些绘图命令,修改的结果在下一次刷新时得到体现。

随机扫描方式显示图形图中的显示处理器DPU可以看作是一个专用的CPU,具有自己的一套指令系统、数据格式和指令计数器,同时还有一些功能部件,如矢量产生器、字符产生器等。在工作过程中,它依次读取显示文件中的指令系列,进行译码、解释、并启动功能部件在CRT上画出点、线、字符串等。随机扫描显示器是为画线应用设计的,由于图形修改方便,因此交互性能较好,图形可以作无级放大,而不会出现锯齿状。但不能显示色彩逼真图形,另外图形的显示质量与一帧的画线数量有关,当一帧线划太多,无法维持30~60帧/秒的刷新频率时,就会出现满屏闪烁。四、光栅扫描显示器普通使用的CRT图形监视器是基于电视技术的光栅扫描显示器。光栅扫描的CRT中,电子束依照固定的扫描线和规定的扫描顺序进行扫描。电子束先从荧光屏左上角开始,向右扫一条水平线,然后迅速地回扫到左边偏下一点的位置,再扫第二条水平线,照此固定的路径及顺序扫下去,直到最后一条水平线,即完成了整个屏幕的扫描。在扫描时,电子束的强度不断变化来建立亮点的图案。图形定义存放在帧缓冲存储器中,帧缓存保存了对应屏幕所有点的亮度值。每个屏幕点称作象素,由于光栅扫描CRT对屏幕上每个象素都有存储亮度信息的能力,因此它能较好地用于包含细微阴影和彩色场景的逼真显示。家用电视和打印机是另一类使用光栅扫描方式的例子。

帧缓存中的单元与屏幕象素的对应关系光栅扫描显示器中,屏幕图形是依靠帧缓存进行刷新的,而视频控制器是负责刷新的部件,它建立了帧缓存中的单元与屏幕象素之间一一对应的关系,视频控制器的逻辑结构如下图所示:X、Y寄存器用来存放屏幕象素的坐标,存储在帧缓存中该象素对应位置的值被取出,并用来控制CRT电子束的强度。从左到右,从上到下,对一帧的每一个象素都进行处理后,又重复上述过程进行下一轮的刷新。

视频控制器的逻辑结构象素的亮度范围取决于帧缓存的位数。在简单的黑白显示中,每个象素只有两个亮度值:亮、暗,因此每个象素只需一位来控制屏幕位置的亮度。如果要显示彩色并且亮度可变,就需要增加位,在高质量系统中,每个象素可多达24位(红、绿、蓝三基色,每种基色占8位:8×3=24位),这时每个象素可显示224种亮度值。工作于高分辨率和真彩色模式下的光栅系统显示的图形精度高、质量好,但也带来两个问题:其一是需要大容量的帧缓存,例如当屏幕分辨率为1024×1024,每个象素24位(以真彩色显示)时,帧缓存的容量需要:1024×1024×24/8=3M字节;其二是要求视频控制器对帧缓存有较快的存取速度,通信线路有较大的传输带宽。解决的办法也有两个:采用彩色表机制和采用隔行扫描方法。1、彩色表彩色表是一维的线性表,它用来定义象素的颜色。我们知道要显示很多种颜色,帧缓存的容量就要很大。但实际上对一幅具体的画面而言,其使用的颜色数目并不多(几百至几千种)。为了解决帧缓存容量不能过大而又满足实际需要,产生了彩色表,彩色表又称为调色板,它的工作原理如下图所示。从图中可以看到,帧缓存各单元保存的不再是相应象素的颜色值,而仅是该象素颜色的一个索引,它是彩色表的某个地址,按照这个索引值在彩色表中取出红、绿、蓝三种颜色的分量,然后送CRT显示器对该象素进行颜色显示。

采用彩色表的光栅扫描显示系统的工作原理假设彩色表的长度为256,而该表中的颜色又是从待显示画面中挑选出来的最具代表性的颜色,则显示出来的画面一般来说质量相当不错。目前,各种格式的图像文件中都带有彩色表数据。2、扫描方法在光栅CRT中,因为帧缓存里存放了一帧图像的亮度信息,所以依靠帧缓存对屏幕进行刷新,刷新频率一般为50~60帧/秒。图像再现时,有两种扫描方法:逐行扫描(见下图)从屏幕顶端第0行开始,逐行往下扫。在每一行扫完回到下一行时,回扫线是被消隐的,从屏幕顶部到底部扫描一次称为一帧,由底部再回到顶部的回扫过程也是消隐的。隔行扫描(见下图)将扫描分成两场,先扫描偶数行0、2、4、6…,再扫描奇数行1、3、5、7…,顺序从顶部扫描到底部。隔行扫描只需用逐行扫描一半的时间就能看见整个屏幕显示,因此隔行扫描技术用于较慢的刷新频率。例如刷新频率为30帧/秒,如采用逐行扫描显示,可注意到图形在闪烁,但采用隔行扫描,扫描一帧的时间只用了原来一半,也就是说刷新频率接近60帧/秒,这时图形显示质量提高,不再闪烁。

扫描方法光栅扫描显示器最突出的优点是:它不仅可以显示物体的轮廓线,而且由于能对每一象素的灰度或色彩控制,因而可以进行实面积填充,这就使得输出真实感图形成为可能。此外,它可以和电视兼容,价格远低于随机扫描显示器。自80年代以来,得到迅速发展,其应用领域也不断扩大,已成为显示器市场的主流。光栅扫描显示器的缺点是:从应用程序中将图形的描述转换成帧缓存中象素信息的过程(扫描转换)比较费时,相应的软件比较复杂。另外,在显示斜线时,还存在线条边缘的阶梯效应。五、直视存储管显示器直视存储管显示器DVST(Direct-ViewStorageTube)是20世纪60年代后期开始出现的图形显示器,它的最大特点在于它的荧光粉能够在足够长的时间内(以小时计)保持图形而不需要刷新,因此价格低廉,工作中可以不闪烁地显示任意多的线条和字符,而且相当清晰。直视存储管显示器显示图形的方式和随机扫描显示器一样,电子束在屏幕上随机绘出图形,同样它也只能画线图,不能进行实面积填充。直视存储管显示器的致命弱点在于图形的修改和删除方面,它只能一次擦除整屏的图形,而且擦除时间长达数秒,若想有选择地擦除某一部分图形则是不可能的。这样,就限制了它在动态作图和交互修改作图方面的应用。1.4.2硬拷贝设备图形显示器用于观察、修改图形,但是屏幕上的图形不可能长久地保存下来,在工程界还需要变成图纸或胶片用于生产,因此在计算机图形系统中还应该有绘图机这样的图形硬拷贝输出设备。象显示器一样,图形硬拷贝输出设备的发展也非常迅速,且种类繁多,它的发展动向正朝着高速度、高精度、高性能、大面积、低成本的方向发展。一、打印机打印机以两种方式:击打式或非击打式产生输出。击打式打印机隔着色带将某种格式的字符打在纸上。行式打印机是击打设备的例子,其字体装在带上、链上、鼓上或轮上。非击打式打印机和绘图仪用激光技术、喷墨技术、复印技术(照相拷贝)、静电方式和电热方式,把图像印在纸上。字符击打式打印机常常有一个点阵打印头,其中包含有一组矩形阵列结构金属针,针的总数决定着打印机的质量,单个字符或图案可用缩回某些针而让余下的针来打印。打印机实物图二、激光设备在激光设备里,激光束把要打印的图形写在感光鼓上,鼓再把这一图形转移到纸上。激光打印机的主要构成部分有感光鼓、炭粉、打底电晕丝和转移电晕丝。

激光打印机结构图三、喷墨设备喷墨法产生的输出,是沿包裹在鼓上的纸卷逐行喷墨水来实现的。在高压下墨水形成墨雾,充电荷的墨雾在电场控制下发生偏转,将墨雾喷印到纸上。喷绘仪实物图四、静电设备静电设备沿纸的宽度方向一次一整行地置负电荷于纸上,尔后,面对调色剂曝光。调色剂充以正电,被吸引到充以负电的区域,从而产生指定的输出。静电绘图仪分辨率可达200dpi,其速度比笔绘仪高,运行可靠,噪声小,但用纸特殊而价格昂贵。静电绘图仪结构图五、电热式设备电热式利用点阵打印头的热度,在热感应纸上输出图案。热升华打印机六、笔绘仪笔绘仪有一支或多支笔安装在横跨纸的笔架或滑杆上,各种彩色和不同粗细的笔用来绘制各种阴影和线型。与前面几种点阵硬拷贝设备不同,笔绘仪属于随机画线硬拷贝设备。笔绘仪的绘图速度取决于绘图笔移动的速度和加速度。这里,加速度和笔绘仪笔头的质量有关。机械传动式绘图仪结构图平面电机式绘图仪结构图1.5图形软件系统硬件是实现绘图的必要条件,但要保证具有良好的信息处理能力、较高的绘图速度与精度、清晰美观的图形、操作使用方便,则必须有足够先进的软件支持系统。图形软件系统涉及:图形应用数据结构、图形应用程序、图形软件包及图形接口等内容。一、图形应用数据结构图形应用数据结构实际上是一组图形数据文件,其中存储了欲生成图形对象的全部描述信息。这些信息包括对象的几何坐标数据,对象的颜色、线型(实线、虚线、点划线等)、纹理等属性,以及对象各部分之间连接关系的数据,有时还可能包括对象的某些专业属性,如:比重、价格、材料、高程、植被等。在计算机图形学中,根据这类信息的详细描述,生成对应的图形,并完成对这些图形的操作和处理。所以,图形应用数据结构是生成图形的基础。二、图形应用程序图形应用程序在整个图形软件系统中起着主控的作用。它一方面根据应用问题的要求,从应用数据结构中提取数据,调用图形包的相关子程序,完成作图或对图形进行各种处理;另一方面,它又接受操作员的输入信息,作出相应的反应(如修改或增删数据结构中的数据项,改变作图模式,重新作图等);此外,它还包括用户界面的一些操作:菜单提示、文件存取、图形设备接口的调用、图形图像格式的转换、系统维护、信息提示、帮助等等,从而构成一个功能完整的图形软件系统环境。三、图形软件包图形软件包是图形软件的核心,它实际上是由许多图形子程序所组成。图形软件包在操作系统上建立了面向图形的输入、输出、生成、坐标变换、修改等功能命令,以及系统调用和定义标准,而且要求对用户透明,与所采用的图形设备无关,与所使用的程序设计语言无关,接口友善、技术相容。这些被用户所承认和广泛应用的图形软件包,形成了一个为大家都接受的图形标准,就像现在所通用流行的GKS、GKS-3D、PHIGS、CORE等图形标准。采用图形标准开发的图形软件包的优点是:不受机器的限制、与应用无关、与设备无关、与语言无关,因而降低软件研制费用,方便应用软件在不同系统间的移植。四、图形接口图形接口把与设备无关的图形软件包与具体的图形设备隔离开来,在两者之间建立起桥梁。目前国际标准化组织(ISO)公布的图形设备接口标准是CGI。第二章二维基本图形的生成重点:掌握二维图元直线、圆、区域填充、字符的生成算法。难点:理解二维图元生成的算法思想并且用C语言进行算法的实现。课时安排:授课8学时(直线、圆:3学时;区域填充:4学时;字符:1学时);上机4学时(直线、圆:2学时;区域填充:2学时)。

图元生成算法的要求:准确、亮度均匀、速度快。前面已经知道,矢量显示(随机扫描显示器)和光栅显示是两种完全不同的图形显示技术。目前,光栅显示技术占主要地位。原因是:1、光栅显示可以用颜色或图案来填充一个区域;

2、光栅显示以象素为单位进行读写和存储,可以实现对物体细节的描述;

3、图形的任意部分均可以被移动和复制。在这一章里,主要介绍在光栅输出设备上,根据物体的坐标描述构造二维几何图形的方法。在光栅显示器上,象素是屏幕的最小显示单位,因此二维图形的构造就是找出最靠近所描述几何图形的那些象素,将它们置入规定的颜色并放入帧缓存。我们知道,一幅图是由点、直线、曲线、多边形填充区域以及字符串等组成。下面将讨论这些基本图元的生成技术和算法。

2.1直线的扫描转换一、数学直线在数学上,理想的直线是一条由无穷多个无限小的连续的点组成。数学直线二、光栅平面显示的直线但在光栅显示平面上,我们只能用二维光栅格网上尽可能靠近这条直线的象素点的集合来表示它。每个象素具有一定的尺寸,是显示平面上可被访问的最小单位,它的坐标x和y只能是整数,也就是说相邻象素的坐标值是阶跃的而不是连续的。光栅直线三、直线的扫描转换直线的扫描转换,就是要找出显示平面上最佳逼近理想直线的那些象素的坐标值,并将这些象素置成所要求的颜色。直线的扫描转换由于一幅图中可能包含成千上万条直线,所以要求绘制算法应该:1、最接近数学上的直线;2、沿着线段分布的象素应均匀;不均匀的例子如下图所示,对同样长的线段,如果进行图中的扫描转换,就会因为斜率的不同,产生的象素个数不相等,这样将导致象素亮度分布不均匀。3、画线速度尽可能的快。本节我们介绍两个常用的直线生成算法:数值微分法(\o"2.1.1生成直线的DDA算法"DDA)和\o"2.1.2生成直线的Bresenham算法"Bresenham算法。2.1.1生成直线的DDA算法数值微分法即DDA法(DigitalDifferentialAnalyzer),是一种基于直线的微分方程来生成直线的方法。一、直线DDA算法描述:设(x1,y1)和(x2,y2)分别为所求直线的起点和终点坐标,由直线的微分方程得=m=直线的斜率(2-1)可通过计算由x方向的增量△x引起y的改变来生成直线:xi+1=xi+△x(2-2)yi+1=yi+△y=yi+△x·m(2-3)也可通过计算由y方向的增量△y引起x的改变来生成直线:yi+1=yi+△y(2-4)xi+1=xi+△x=xi+△y/m(2-5)式(2-2)至(2-5)是递推的。二、直线DDA算法思想:选定x2-x1和y2-y1中较大者作为步进方向(假设x2-x1较大),取该方向上的增量为一个象素单位(△x=1),然后利用式(2-1)计算另一个方向的增量(△y=△x·m=m)。通过递推公式(2-2)至(2-5),把每次计算出的(xi+1,yi+1)经取整后送到显示器输出,则得到扫描转换后的直线。之所以取x2-x1和y2-y1中较大者作为步进方向,是考虑沿着线段分布的象素应均匀,这在下图中可看出。另外,算法实现中还应注意直线的生成方向,以决定Δx及Δy是取正值还是负值。三、直线DDA算法实现:1、已知直线的两端点坐标:(x1,y1),(x2,y2)

2、已知画线的颜色:color

3、计算两个方向的变化量:dx=x2-x1

dy=y2-y1

4、求出两个方向最大变化量的绝对值:

steps=max(|dx|,|dy|)

5、计算两个方向的增量(考虑了生成方向):

xin=dx/steps

yin=dy/steps

6、设置初始象素坐标:x=x1,y=y1

7、用循环实现直线的绘制:

for(i=1;i<=steps;i++)

{putpixel(x,y,color);/*在(x,y)处,以color色画点*/

x=x+xin;

y=y+yin;

}四、直线DDA算法特点:该算法简单,实现容易,但由于在循环中涉及实型数的运算,因此生成直线的速度较慢。五、直线DDA算法程序:#include<math.h>

voidDDALine(intx1,inty1,intx2,inty2,intcolor)

{

floatincrex,increy,x,y;

intsteps,i;

if(abs(x2-x1)>abs(y2-y1))

steps=abs(x2-x1);

else

steps=abs(y2-y1);

increx=(float)(x2-x1)/steps;

increy=(float)(y2-y1)/steps;

x=x1;

y=y1;

for(i=1;i<=steps;i++)

{

putpixel(x,y,color);//在(x,y)处,以color色画点

x+=increx;

y+=increy;

}

}2.1.2生成直线的Bresenham算法从上面介绍的DDA算法可以看到,由于在循环中涉及实型数据的加减运算,因此直线的生成速度较慢。在生成直线的算法中,Bresenham算法是最有效的算法之一。Bresenham算法是一种基于误差判别式来生成直线的方法。一、直线Bresenham算法描述:它也是采用递推步进的办法,令每次最大变化方向的坐标步进一个象素,同时另一个方向的坐标依据误差判别式的符号来决定是否也要步进一个象素。我们首先讨论m=△y/△x,当0≤m≤1且x1<x2时的Bresenham算法。从DDA直线算法可知这些条件成立时,公式(2-2)、(2-3)可写成:xi+1=xi+1(2-6)yi+1=yi+m(2-7)有两种Bresenham算法思想,它们各自从不同角度介绍了Bresenham算法思想,得出的误差判别式都是一样的。二、直线Bresenham算法思想之一:由于显示直线的象素点只能取整数值坐标,可以假设直线上第i个象素点坐标为(xi,yi),它是直线上点(xi,yi)的最佳近似,并且xi=xi(假设m<1),如下图所示。那么,直线上下一个象素点的可能位置是(xi+1,yi)或(xi+1,yi+1)。由图中可以知道,在x=xi+1处,直线上点的y值是y=m(xi+1)+b,该点离象素点(xi+1,yi)和象素点(xi+1,yi+1)的距离分别是d1和d2:d1=y-yi=m(xi+1)+b-yi(2-8)d2=(yi+1)-y=(yi+1)-m(xi+1)-b(2-9)这两个距离差是d1-d2=2m(xi+1)-2yi+2b-1(2-10)

我们来分析公式(2-10):

(1)当此值为正时,d1>d2,说明直线上理论点离(xi+1,yi+1)象素较近,下一个象素点应取(xi+1,yi+1)。

(2)当此值为负时,d1<d2,说明直线上理论点离(xi+1,yi)象素较近,则下一个象素点应取(xi+1,yi)。

(3)当此值为零时,说明直线上理论点离上、下两个象素点的距离相等,取哪个点都行,假设算法规定这种情况下取(xi+1,yi+1)作为下一个象素点。因此只要利用(d1-d2)的符号就可以决定下一个象素点的选择。为此,我们进一步定义一个新的判别式:pi=△x×(d1-d2)=2△y·xi-2△x·yi+c(2-11)

式(2-11)中的△x=(x2-x1)>0,因此pi与(d1-d2)有相同的符号;这里△y=y2-y1,m=△y/△x;c=2△y+△x(2b-1)。下面对式(2-11)作进一步处理,以便得出误差判别递推公式并消除常数c。将式(2-11)中的下标i改写成i+1,得到:pi+1=2△y·xi+1-2△x·yi+1+c(2-12)将式(2-12)减去(2-11),并利用xi+1=xi+1,可得:pi+1=pi+2△y-2△x·(yi+1-yi)(2-13)再假设直线的初始端点恰好是其象素点的坐标,即满足:y1=mx1+b(2-14)由式(2-11)和式(2-14)得到p1的初始值:p1=2△y-△x(2-15)这样,我们可利用误差判别变量,得到如下算法表示:初始p1=2△y-△x(2-16)当pi≥0时:yi+1=yi+1,

xi+1=xi+1,

pi+1=pi+2(△y-△x)否则:yi+1=yi,

xi+1=xi+1,

pi+1=pi+2△y

从式(2-16)可以看出,第i+1步的判别变量pi+1仅与第i步的判别变量pi、直线的两个端点坐标分量差△x和△y有关,运算中只含有整数相加和乘2运算,而乘2可利用算术左移一位来完成,因此这个算法速度快并易于硬件实现。三、直线Bresenham算法思想之二:由于象素坐标的整数性,数学点(xi,yi)与所取象素点(xi,yir)间会引起误差(εi),当xi列上已用象素坐标(xi,yir)表示直线上的点(xi,yi),下一直线点B(xi+1,yi+1),是取象素点C(xi+1,yir),还是D(xi+1,y(i+1)r)呢?设A为CD边的中点,正确的选择:若B点在A点上方,选择D点;否则,选C点。用误差式描述为:ε(xi+1)=BC-AC=(yi+1-yir)-0.5(2-8')求递推公式:ε(xi+2)=(yi+2-y(i+1)r)-0.5=yi+1+m-y(i+1)r-0.5(2-9')当ε(xi+1)≥0时,选D点,y(i+1)r=yir+1ε(xi+2)=yi+1+m-yir-1-0.5=ε(xi+1)+m-1(2-10')当ε(xi+1)﹤0时,选C点,y(i+1)r=yirε(xi+2)=yi+1+m-yir-0.5=ε(xi+1)+m(2-11')初始时:ε(xs+1)=BC-AC=m-0.5(2-12')为了运算中不含实型数,同时不影响不等式的判断,将方程两边同乘一正整数。令方程两边同乘2·Δx,即d=2·Δx·ε,则:初始时:d=2·Δy-Δx(2-13')递推式:当d≥0时:{d=d+2·(Δy-Δx);

y++;

x++;

}

否则:{d=d+2·Δy;

x++;

}(2-14')四、直线Bresenham算法实现:条件:0≤m≤1且x1<x21、输入线段的两个端点坐标和画线颜色:x1,y1,x2,y2,color;

2、设置象素坐标初值:x=x1,y=y1;

3、设置初始误差判别值:p=2·Δy-Δx;

4、分别计算:Δx=x2-x1、Δy=y2-y1;

5、循环实现直线的生成:

for(x=x1;x<=x2;x++)

{putpixel(x,y,color);

if(p>=0)

{y=y+1;

p=p+2·(Δy-Δx);

}

else

{p=p+2·Δy;

}}五、直线Bresenham算法完善:现在我们修正(2-16)公式,以适应对任何方向及任何斜率线段的绘制。如下图所示,线段的方向可分为八种,从原点出发射向八个区。由线段按图中所示的区域位置可决定xi+1和yi+1的变换规律。容易证明:当线段处于①、④、⑧、⑤区时,以|△x|和|△y|代替前面公式中的△x和△y,当线段处于②、③、⑥、⑦区时,将公式中的|△x|和|△y|对换,则上述两公式仍有效。在线段起点区分线段方向

六、直线Bresenham算法特点:由于程序中不含实型数运算,因此速度快、效率高,是一种有效的画线算法。七、直线Bresenham算法程序:voidBresenhamline(intx1,inty1,intx2,inty2,intcolor)

{

intx,y,dx,dy,s1,s2,p,temp,interchange,i;

x=x1;

y=y1;

dx=abs(x2-x1);

dy=abs(y2-y1);

if(x2>x1)

s1=1;

else

s1=-1;

if(y2>y1)

s2=1;

else

s2=-1;

if(dy>dx)

{

temp=dx;

dx=dy;

dy=temp;

interchange=1;

}

else

interchange=0;

p=2*dy-dx;

for(i=1;i<=dx;i++)

{

putpixel(x,y,color);

if(p>=0)

{

if(interchange==0)

y=y+s2;

else

x=x+s1;

p=p-2*dx;

}

if(interchange==0)

x=x+s1;

else

y=y+s2;

p=p+2*dy;

}

}2.2圆的生成这里仅讨论圆心位于坐标原点的圆的扫描转换算法,对于圆心不在原点的圆,可先用平移变换,将它的圆心平移到原点,然后进行扫描转换,最后再平移到原来的位置。有几种较容易的方法可以得到圆的扫描转换,但是效率都不高。例如:直角坐标法和极坐标法:1、直角坐标法圆的直角坐标方程为x2+y2=R2

若取x作为自变量,解出y,得到(2-17)我们可以先扫描转换四分之一的圆周。让自变量x从0到R以单位步长增加,在每一步时可解出y,然后调用画点函数即可逐点画出圆。但这样做,由于有乘方和平方根运算,并且都是浮点运算,算法效率不高。而且当x接近R值时(圆心在原点),在圆周上的点(R,0)附近,由于圆的斜率趋于无穷大,使得圆周上有较大的间隙。2、极坐标法假设圆周上一点P(x,y)处的半径与x轴的夹角为θ,则圆的极坐标方程为

x=Rcosθ

y=Rsinθ(2-18)利用下面将要介绍的圆周上点的对称性,那么自变量θ的取值范围就是(0,45°)。这个方法涉及三角函数计算和乘法运算,计算量较大。因此,也不是一种有效的方法。

2.2.1圆的八分对称性圆心位于原点的圆有四条对称轴x=0、y=0、x=y和x=-y,见下图。从而若已知圆弧上一点P(x,y),就可以得到其关于四条对称轴的七个对称点,这种性质称为八分对称性。因此只要能画出八分之一的圆弧,就可以利用对称性的原理得到整个圆弧。下面的函数CirclePoints()用来显示P(x,y)及其七个对称点。voidCirclePoints(x,y,color)

intx,y,color;

{

putpixel(x,y,color);

putpixel(x,-y,color);

putpixel(-x,y,color);

putpixel(-x,-y,color);

putpixel(y,x,color);

putpixel(y,-x,color);

putpixel(-y,x,color);

putpixel(-y,-x,color);

}圆的八分对称性注意:当圆心不在原点时,只须在putpixel()函数中加上平移量x0、y0(圆心坐标)即可。

例如当x0=300,y0=200时,则:…

putpixel(x0+x,y0+y,color);

putpixel(x0+x,y0-y,color);

putpixel(x0-x,y0+y,color);

putpixel(x0-x,y0-y,color);

putpixel(x0+y,y0+x,color);

putpixel(x0+y,y0-x,color);

putpixel(x0-y,y0+x,color);

putpixel(x0-y,y0-x,color);

…2.2.2中点算法生成圆中点画圆算法在一个方向上取单位间隔,在另一个方向的取值由两种可能取值的中点离圆的远近而定。实际处理中,用决策变量的符号来确定象素点的选择,因此算法效率较高。一、中点画圆算法描述设要显示圆的圆心在原点(0,0),半径为R,起点在(0,R)处,终点在(,)处,顺时针生成八分之一圆,利用对称性扫描转换全部圆。为了应用中点画圆法,我们定义一个圆函数F(x,y)=x2+y2-R2(2-19)任何点(x,y)的相对位置可由圆函数的符号来检测:F(x,y)<0点(x,y)位于数学圆内

=0点(x,y)位于数学圆上

>0点(x,y)位于数学圆外(2-20)

如下图所示,图中有两条圆弧A和B,假定当前取点为Pi(xi,yi),如果顺时针生成圆,那么下一点只能取正右方的点E(xi+1,yi)或右下方的点SE(xi+1,yi-1)两者之一。中点画线算法假设M是E和SE的中点,即,则:1、当F(M)<0时,M在圆内(圆弧A),这说明点E距离圆更近,应取点E作为下一象素点;

2、当F(M)>0时,M在圆外(圆弧B),表明SE点离圆更近,应取SE点;

3、当F(M)=0时,在E点与SE点之中随便取一个即可,我们约定取SE点。二、中点画圆算法思想因此,我们用中点M的圆函数作为决策变量di,同时用增量法来迭代计算下一个中点M的决策变量di+1。(2-21)下面分两种情况来讨论在迭代计算中决策变量di+1的推导。1、见图(a),若di<0,则选择E点,接着下一个中点就是,这时新的决策变量为:(2-22)(a)(di<0)中点画线算法

式(2-22)减去(2-21)得:di+1=di+2xi+3(2-23)2、见图(b),若di≥0,则选择SE点,接着下一个中点就是,这时新的决策变量为:(2-24)(b)(di≥0)中点画线算法式(2-24)减去(2-21)得:di+1=di+2(xi-yi)+5(2-25)我们利用递推迭代计算这八分之一圆弧上的每个点,每次迭代需要两步处理:

(1)用前一次迭代算出的决策变量的符号来决定本次选择的点。

(2)对本次选择的点,重新递推计算得出新的决策变量的值。剩下的问题是计算初始决策变量d0,如下图所示。对于初始点(0,R),顺时针生成八分之一圆,下一个中点M的坐标是,所以:(2-26)生成圆的初始条件和圆的生成方向三、中点画圆算法实现1、输入:圆半径r、圆心(x0,y0);

2、确定初值:x=0,y=r、d=5/4-r;

3、While(x<=y)

{

·利用八分对称性,用规定的颜色color画八个象素点(x,y);

·若d≥0

{

y=y-1;

d=d+2(x-y)+5);

}

否则

d=d+2x+3;

·x=x+1;

}四、中点画圆算法完善在上述算法中,使用了浮点数来表示决策变量d。为了简化算法,摆脱浮点数,在算法中全部使用整数,我们使用e=d-1/4代替d。显然,初值d=5/4-r对应于e=1-r。决策变量d<0对应于e<-1/4。算法中其它与d有关的式子可把d直接换成e。又由于e的初值为整数,且在运算过程中的迭代值也是整数,故e始终是整数,所以e<-1/4等价于e<0。因此,可以写出完全用整数实现的中点画圆算法。

要求:写出用整数实现的中点画圆算法程序,并上机调试,观看运行结果。五、中点画圆算法程序voidMidpointCircle(intx0,inty0,intr,intcolor)

{

intx,y;

floatd;

x=0;

y=r;

d=5.0/4-r;

while(x<=y)

{

putdot(x0,y0,x,y,color);

if(d<0)

d+=x*2.0+3;

else

{

d+=2.0*(x-y)+5;

y--;

}

x++;

}

}putdot(x0,y0,x,y,color)

{

putpixel(x0+x,y0+y,color);

putpixel(x0+x,y0-y,color);

putpixel(x0-x,y0+y,color);

putpixel(x0-x,y0-y,color);

putpixel(x0+y,y0+x,color);

putpixel(x0+y,y0-x,color);

putpixel(x0-y,y0+x,color);

putpixel(x0-y,y0-x,color);

}2.2.3正负算法生成圆正负法是利用平面曲线将平面划分成正负区域,对当前点产生的圆函数进行符号判别,利用负反馈调整以决定下一个点的产生来直接生成圆弧。一、正负画圆算法描述设要显示圆的圆心在原点(0,0),半径为R,初始点的坐标为(0,R),顺时针生成八分之一圆,令:F(x,y)=x2+y2-R2则圆的方程为:F(x,y)=0(2-27)当点(x,y)在圆内时,则F(x,y)<0;

当点(x,y)在圆外时,则F(x,y)>0;

当点(x,y)在圆上时,则F(x,y)=0;二、正负画圆算法思想现以下图的AB弧为例,来说明正负画圆法(顺时针生成圆)。假设当前点为Pi(xi,yi),取下一个点Pi+1(xi+1,yi+1)的原则是:

1、当F(xi,yi)≤0时:取xi+1=xi+1,yi+1=yi。即向右走一步,从圆内走向圆外。对应图(a)中的从Pi到Pi+1。

2、当F(xi,yi)>0时:取xi+1=xi,yi+1=yi-1。即向下走一步,从圆外走向圆内。对应图(b)中的从Pi到Pi+1。由于向圆内或向圆外走取决于F(xi,yi)的正负,因此称为正负法。下面分两种情况求出F(xi,yi)的递推公式:

(1)当F(xi,yi)≤0时,向右走,取xi+1=xi+1,yi+1=yi,则F(xi+1,yi+1)=F(xi+1,yi)

=(xi+1)2+yi2-R2

=(xi2+yi2-R2)+2xi+1

=F(xi,yi)+2xi+1(2-28)(2)当F(xi,yi)>0时,向下走,取xi+1=xi,yi+1=yi-1,则F(xi+1,yi+1)=F(xi,yi-1)

=xi2+(yi-1)2-R2

=(xi2+yi2-R2)-2yi+1

=F(xi,yi)-2yi+1(2-29)初始时,x=0,y=R,故F(0,R)=(02+R2)-R2=0(2-30)公式(2-28)、(2-29)和(2-30)就构成正负画圆算法的核心。给象素坐标(x,y)及F赋初始值后,进入循环画点;画点后,根据F的符号进行F值的递推和下一个点的获取,直到x>y为止。同前面介绍的一样,利用圆的八分对称性,循环一次,画八个点。三、正负画圆算法实现注意:初值不同、圆的生成方向不同时,当前点和下一个点的获取原则是不同的,见下图。例如,初始点(R,0),逆时针生成圆,从图(b)可知:若当前点Pi在圆内,则下一点Pi+1(xi,yi+1),即向上走一步;

若当前点Pi在圆外,则下一点Pi+1(xi-1,yi),即向左走一步;(a)顺时针生成圆

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论