计算机图形生成的基本单位是,第五章 基本图形生成算法
如何在指定的输出设备上根据坐标描述构造基本二维几何图形(点、直线、圆、椭圆、多边形域、字符串及其相关属性等)。
图形生成的概念
图形的生成:是在指定的输出设备上,根据坐标描述构造二维几何图形。
图形的扫描转换:在光栅显示器等数字设备上确定一个最佳逼近于图形的象素集的过程。
直线段的扫描转换
直线的绘制要求
(1)直线要直;
(2)直线的端点要准确,无定向性无断裂;
(3)直线的亮度、色泽要均匀;
(4)画线的速度要快;
(5)具有不同的色泽、亮度、线型等。
解决的问题:给定直线两端点P0(x0,y0)和P1(x1,y1),画出该直线。
数值微分法(DDA法):
增量算法
直观、易实现
不利于用硬件实现
中点Bresenhan算法:
算法原理:根据直线的斜率确定或选择变量在x或y方向上每次递增一个单位,而另一方向的增量为1或0,它取决于实际直线与相邻象素点的距离,这一距离称为误差项。
中点Bresenham算法——算法步骤
输入直线的两端点P0(x0,y0)和P1(x1,y1)。
计算初始值△x、△y、D=△x-2△y、x=x0、y=y0。
绘制点(x,y)。判断D的符号。若D<0,则(x,y)更新为(x+1,y+1),D更新为D+2△x-2△y;否则(x,y)更新为(x+1,y),
D更新为D-2△y。
当直线没有画完时,重复上一步骤,否则结束。
改进的Bresenhan算法——算法步骤
1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。
2.计算初始值△x、△y、e=-△x、x=x0、y=y0。
3.绘制点(x,y)。
4.e更新为e+2△y,判断e的符号。若e>0,则(x,y)更新为(x+1,y+1),同时将e更新为e-2△x;否则(x,y)更新为(x+1,y)。
5.当直线没有画完时,重复步骤3和4。否则结束。
圆的扫描转换
解决的问题:绘出圆心在原点,半径为整数R的圆x2+y2=R2。
简单方程产生圆弧:
算法原理:利用其函数方程,直接离散计算。
中点Bresenham画圆——算法步骤
1.输入圆的半径R。
2.计算初始值d=1-R、x=0、y=R。
3.绘制点(x,y)及其在八分圆中的另外七个对称点。
4.判断d的符号。若d<0,则先将d更新为d+2x+3,再将(x,y)更新为(x+1,y);否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)。
5.当x
多边形的扫描转换与区域填充:
多边形的扫描转换主要是通过确定穿越区域的扫描线的覆盖区间来填充。
区域填充是从给定的位置开始涂描直到指定的边界条件为止。
多边形的扫描转换:
顶点表示用多边形的顶点序列来刻划多边形。
点阵表示是用位于多边形内的象素的集合来刻划多边形。
扫描转换多边形:从多边形的顶点信息出发,求出位于其内部的各个象素,并将其颜色值写入帧缓存中相应单元的过程。
X-扫描线算法——原理
基本思想:按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的所有象素。
X-扫描线算法——算法步骤
1.确定多边形所占有的最大扫描线数,得到多边形顶点的最小和最大y值(ymin和ymax)。
2.从y=ymin到y=ymax,每次用一条扫描线进行填充。
3.对一条扫描线填充的过程可分为四个步骤:
求交;排序;交点配对;区间填色。
X-扫描线算法——取整规则
交点的取整规则:使生成的像素全部位于多边形之内。(用于直线等图元扫描转换的四舍五入原则可能导致部分像素位于多边形之外,从而不可用)。
假定非水平边与扫描线y=e相交,交点的横坐标为x,规则如下:
规则1:X为小数,即交点落于扫描线上两个相邻像素之间时:
交点位于左边界之上,向右取整;
交点位于右边界之上,向左取整;
规则2:边界上象素的取舍问题,避免填充扩大化。规定落在右边边界上的像素不予填充。(具体实现时,只要对扫描线与多边形的相交区间左闭右开)
规则3:当扫描线与多边形顶点相交时,交点的取舍,保证交点正确配对。
解决方法:
当扫描线与多边形的顶点相交时,
若共享顶点的两条边分别落在扫描线的两边,交点只算一个;
若共享顶点的两条边在扫描线的同一边,这时交点作为零个或两个。
实际处理:只要检查顶点的两条边的另外两个端点的Y值,两个Y值中大于交点Y值的个数是0,1,2,来决定取0,1,2个交点。
改进的有效边表算法:
改进原理:
处理一条扫描线时,仅对有效边求交。
利用扫描线的连贯性。
利用多边形边的连贯性。
改进的有效边表算法(Y连贯性算法)
有效边(Active
Edge):指与当前扫描线相交的多边形的边,也称为活性边。
有效边表(Active
Edge Table, AET):把有效边按与扫描线交点x坐标递增的顺序存放在一个链表中,此链表称为有效边表。
有效边表的每个结点:
x ymax 1/k next
改进的有效边表算法——构造边表
首先构造一个纵向链表,链表的长度为多边形所占有的最大扫描线数,链表的每个结点,称为一个桶,则对应多边形覆盖的每一条扫描线
。
将每条边的信息链入与该边最小y坐标(ymin )相对应的桶处。也就是说,若某边的较低端点为ymin,则该边就放在相应的扫描线桶中。
每条边的数据形成一个结点,内容包括:该扫描线与该边的初始交点x(即较低端点的x值),1/k,以及该边的最大y值ymax。
x|ymin ymax 1/k
NEXT
同一桶中若干条边按X|ymin由小到大排序,若X|ymax 相等,则按照1/k由小到大排序。
改进的有效边表算法——算法步骤
(1)初始化:构造边表,AET表置空;
(2)将第一个不空的ET表中的边与AET表合并;
(3)由AET表中取出交点对进行填充。填充之后删除y=ymax的边;
(4)yi+1=yi+1,根据xi+1=xi+1/k计算并修改AET表,同时合并ET表中y=yi+1桶中的边,按次序插入到AET表中,形成新的AET表;
(5)AET表不为空则转(3),否则结束。
边缘填充算法:
基本思想:按任意顺序处理多边形的每条边。处理时,先求出该边与扫描线的交点,再对扫描线上交点右方的所有象素取反。
算法简单,但对于复杂图型,每一象素可能被访问多次
栅栏填充算法:
栅栏指的是一条过多边形顶点且与扫描线垂直的直线。它把多边形分为两半。
基本思想:按任意顺序处理多边形的每一条边,但处理每条边与扫描线的交点时,将交点与栅栏之间的象素取反。
这种算法尽管减少了被重复访问象素的数目,但仍有一些象素被重复访问。
边标志算法:
基本思想:先用特殊的颜色在帧缓存中将多边形的边界勾画出来,然后将着色的象素点依x坐标递增的顺序配对,再把每一对象素构成的区间置为填充色。
分为两个步骤:打标记;填充。
当用软件实现本算法时,速度与改进的有效边表算法相当,但本算法用硬件实现后速度会有很大提高。
区域填充
基本概念:
区域填充是指从区域内的某一个象素点(种子点)开始,由内向外将填充色扩展到整个区域内的过程。
区域是指已经表示成点阵形式的填充图形,它是相互连通的一组像素的集合。
区域的表示方法:
边界表示法:把位于给定区域的边界上的象素一一列举出来的方法。
边界表示法中,由于边界由特殊颜色指定,填充算法可以逐个象素地向外处理,直到遇到边界颜色为止,这种方法称为边界填充算法(Boundary-fill
Algorithm)。
内点表示法:枚举出给定区域内所有象素的表示方法。以内点表示法为基础的区域填充算法称为泛填充算法(Flood-fill
Algorithm)。
区域的分类:
4-连通
计算机图形生成的基本单位是,第五章 基本图形生成算法相关推荐
- 计算机图形学三维变换论文,计算机图形学 第5章 三维图形生成和变换技术
计算机图形学 第5章 三维图形生成和变换技术 (63页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 第五章 目录第五章 三维图形生成和变 ...
- 第十五章 - 垃圾回收相关算法
第十五章 - 垃圾回收相关算法 文章目录 第十五章 - 垃圾回收相关算法 1.标记阶段:引用计数算法 1.1 垃圾标记阶段:对象存活判断 1.2 引用计数算法 1.3 小结 2.标记阶段:可达性分析算 ...
- 第五章:深度生成模型
目录 ➢Part One.深度生成模型概述 ➢Part Two.Hopfield神经网络 ➢一.神经网络的分类 ➢二.Hopfiled神经网络 ➢1.Hopfield神经网络优点 ➢2.Hopfiel ...
- mysql第五章上机事务_算法第五章上机实践
设有n件工作分配给n个人.将工作i分配给第j个人所需的费用为cij . 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小. 输入格式: 输入数据的第一行有1 个正 ...
- 计算机图形学生成的基本单位是线段,计算机图形学.doc
文档介绍: 计算机图形学70125一. 判断题(10 分) 1. 计算机图形生成的基本单位是线段.( ) 2. 在种子填充算法中所提到的八向连通区域算法同时可填充四向连通区; ( ) 3. 齐次坐标提 ...
- 《图算法》第五章 中心性算法-1
对图算法有兴趣的朋友可以关注微信公众号 :< Medical与AI的故事> 原文链接:<图算法>第五章-1 中心性算法 中心性算法(centrality algorithm)用 ...
- 计算机地图制图原理与算法,计算机地图制图原理与方法-基本图形生成算法.ppt...
<计算机地图制图原理与方法-基本图形生成算法.ppt>由会员分享,可在线阅读,更多相关<计算机地图制图原理与方法-基本图形生成算法.ppt(35页珍藏版)>请在人人文库网上搜索 ...
- MFC与Matlab编程总结 (以《Matlab与C/C++混合编程技术(第三版)》-刘维 第五章 生成DLL为例)
近期要完成一个任务,把人脸超分辨率的算法集成在一个系统中,嵌入人脸库及字典集等.老板的要求是有比较好的界面,目前也只能是VS那一套了,前一段时间完成的项目是用的MFC,这次也就是用MFC来完成吧.但是 ...
- NLP复习资料(2)-三~五章:形式语言、语料库、语言模型
NLP复习资料-三~五章 1.第三章:形式语言 2.第四章:语料库 3.第五章:语言模型 国科大,宗老师<自然语言处理>课程复习笔记,个人整理,仅供参考. 1.第三章:形式语言 1.语言描 ...
最新文章
- ExtJS-Grid框增加复选框checkbox
- 真正理解、区分Action,Service和Dao功能
- 深度学习~图神经网络GNN
- Redhat中设置环境变量PATH
- PHP API接口签名验证
- 0基础改行学python_零基础想转行学习python,该如何学习,有学习路线分享吗?...
- advanced east_SpriteKit Advanced —如何构建2,5D游戏(第二部分)
- django本地安装mysql_django使用mysql(本地环境下)_MySQL
- spring框架(三)mvc
- visual studio 按钮判断管理员和用户_用户管理的设计原则
- libcstl中的list没法插入自定义数据
- jquery概念、引入、选择器
- mysql学习笔记--表操作
- 身份证过期了银行卡还能用吗?
- 操作手册模板_挂蓝悬臂浇筑箱梁施工技术操作手册
- Sun Solaris Sybae客户端”安装”日记
- python有参装饰器详解_Python 带有参数的装饰器实例代码详解
- 自己动手实现一个简单的 IOC,牛皮!!
- 全网首发:JProfiler11运行时找不到库的解决办法
- springboot - 应用实践(3)springboot的核心
热门文章
- vue3 ref,reactive请求后的赋值问题以及解决方法
- React学习(六)-React中组件的数据-state
- python的random()函数用法_python中的随机函数random的用法示例
- Gateway+Nacos+Sleuth+Zipkin网关链路追踪(测试及源码),Gateway+FeignClient+Nacos通过网关远程调用微服务(一)
- 抑郁症的第十年:我终于跟自己和解
- Python自然语言处理—提取词干
- Nginx更新文件后不生效
- DockerHub入门
- 从0到一开发微信小程序(1)——申请账号并安装开发环境
- 计算机在线给手机杀毒,怎么用电脑给手机杀毒(如果手机中病毒了怎么办)