基本图形生成算法

图元扫描转换

直线段扫描转换

圆弧扫描转换

实区域填充

图形的剪裁

图形反走样

消隐

光栅化算法

线段光栅化算法

    DDA算法

中点Bresenham画线算法

Bresenham改进算法

圆光栅化算法

    中点算法

中点整数算法

中点整数优化算法

直线的扫描转换:

最佳逼近于该直线的一组象素;按扫描线顺序,对这些象素进行写操作

一、直线段的生成

1.DDA算法

原理:直线的一阶导数连续,且X Y的变化量成正比,通过每次加一定的增量绘点

由于精度有限,选择ε=1/max(|Δx|,|Δy|),则ε*Δx或ε*Δy称为最大步长;每次在最大位移上增加一个步长

当|k|≤1,max=|Δx|:x‘=x±1,y'=y±k

当|k|≥1,max=|Δy|:x‘=x±1/k,y'=y±1

注意:每次绘制的点,对求出的x’和y‘四舍五入,即加0.5再取整int

2.中点画线法Bresenham

直线将坐标平面分成三部分:在线上,F(x,y)=0;在上方,F(x,y)>0;;在下方,F(x,y)<0。

每次在最大位移方向走一步,另一方向是否走取决于误差项d

假设0≤k≤1:

求出正的dx和dy;d0=dx-2*dy;UL=2*dx-2*dy,DL=-2*dy;

绘制当前的点(x,y),x++;

判断d的正负:d>0则取正右侧的点,绘制后,d’=d+DL;否则取右上方的点,绘制后,d‘=d+UL

二、圆的生成

中点画圆法;画八分之一后对称

第一个点:(0,r);d0=1.25-r(实际上多采用1-r,结果相同)

判断d的正负:

d<0:d’=d+2x+3,下一个点取正右侧点;

d>0:d'=d+2(x-y)+5,下一个点取右下角的点。

三、椭圆的扫描转换

类似于圆的扫描转换。

分界线:切线斜率为-1的点

四、多边形填充算法

实区域填充算法分类:

扫描线填充算法---扫描线顺序

有序边表算法

边缘填充算法

种子填充算法---内部一个点出发

简单种子算法

扫描线种子算法

Ⅰ-扫描线填充算法:

1.顶点交点的计数问题

检查交于该顶点两条边另外两个端点的y值大于该顶点y值的个数

2.影响效率的原因

求交和排序——简化交点运算——每条扫描线的活动边表

1)有序边表法

活性边表:

与当前扫描线相交的边称为活性边;按与扫描线交点x坐标递增的顺序存入一个链表中,称为活动边表;记录了多边形边沿扫描线的交点序列。

对当前扫描线的活动边表作更新,即可得到下一条扫描线的活动边表

活性边表中的信息

x:当前扫描线与边的交点

△x=-b/a:从当前扫描线到下一条扫描线之间的x增量

ymax:边所交的最高扫描线

指向下一个的指针

活性边表的更新

新边插入、旧边删除

新边表:

存放该扫描线第一次出现的边;方便活性边表的更新

新边表的信息

x:扫描线与该边的初始交点

△x:x的增量

ymax:该边的最大y值

有序边表算法的数据结构:

由新边表ET和活性边表AEL两部分组成

表结构ET和AEL中的基本元素为多边形的边

x: 在ET中表示边的下端点的x坐标,在AEL中则表示边与扫描线的交点的坐标;

Δx:边的斜率的倒数;

ymax:边的上端点的y坐标;

next:指向下一条边的指针。

填表示例:

算法:

优缺点:

优点:每个像素值访问一次且与设备无关;

缺点:数据结构复杂 只适合软件实现

2)边缘填充算法   /   看图就明白了

按照边的顺序逆时针进行、填充每条边所对应正右侧的部分、填充奇数次保留,偶数次抵消;

优点:有帧缓存的显示器;任意顺序处理多边形的边;仅访问与该边有交点的扫描线上右方的像素,算法简单

缺点:每一像素可能被访问多次,输入/输出量大;图形输出不能与扫描同步进行,全部画完才能打印

补充:栅栏填充算法   /   原来的参照线为最右侧,改为“栅栏”

Ⅱ-种子填充算法-要求区域是连通的

简单种子算法

从一个点向外扩展;四连通or八连通

4连通:

(1)栈顶像素出栈

(2)将出栈象素置成填充色

(3)按右、上、左、下顺序检查与出栈象素相邻的四象素,若其中某象素不在边界上且未被置成填充色,则将其入栈

可以填充有孔区域

缺点:象素会入栈多次,降低效率占空间;算法简单但是费时间和内存

扫描线种子填充算法

减少递归;适用于边界表示的4连通区域

在任意不间断区间中只取一个种子像素——

(1)栈顶像素出栈

(2)沿扫描线对出栈像素的左右像素进行填充,直到遇到边界像素为止

(3)将上述区间内最左、最右像素记为xl和xr

(4)在区间[xl,xr]中检查与当前扫描线相邻的上下两条扫描线是否全为边界像素、或已填充的像素若不是,则把每一区间的最右像素取为种子像素入栈

可以填充有孔区域

五、图形反走样技术

阶梯边界/细节失真/狭小意识/动画序列中时隐时现,产生闪烁

方法:

提高分辨率-代价高,减轻而不消除;分辨率*2,点距/2,帧缓存&时间*4

高分辨率-(显示模式)计算、低分辨率显示-减轻而不消除;(把每个像素分为四个子像素,扫描转换算法求得各子像素的灰度值,然后对四像素的灰度值简单平均,作为该像素的灰度值)

简单区域取样-改变直线段模型。将直线段→有一定宽度的狭长矩形 、当直线段与象素有交,求出相交区域的面积 、根据面积确定该象素的亮度值(仍有锯齿效应,灰度差)

计算机图形学-基本图形生成算法相关推荐

  1. 计算机图形学 Bresenham直线生成算法

    bresenham算法是一种光栅化的直线生成算法,是计算机图形学目前使用广泛的直线扫描转换算法,具体逻辑很简单,就是描点.所以bresenham的算法研究实际上是研究目标点的选择. 实验环境: ope ...

  2. 计算机图形学期末复习之第四章:基本图形生成算法

    可能这会是图形学期末复习最后一个整理了, 感觉其实不如直接看PPT. 1.填空20+选择20+判断10+简答20+综合30 2.没有编程题 3.复习PPT上的基本概念和算法 计算机图形学期末复习之第四 ...

  3. 计算机地图制图原理与算法,计算机地图制图原理与方法-基本图形生成算法.ppt...

    <计算机地图制图原理与方法-基本图形生成算法.ppt>由会员分享,可在线阅读,更多相关<计算机地图制图原理与方法-基本图形生成算法.ppt(35页珍藏版)>请在人人文库网上搜索 ...

  4. 计算机图形学绘制图形的过程,计算机图形学13_图形绘制流水线的实现.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbsp图形图像 计算机图形学13_图形绘制流水线的实现.pdf6页 本 ...

  5. 计算机图形学——基本图形的扫描转换

    资源中有关于计算机图形学的基本图形的扫描转换的介绍详细PPT讲解以及一个小提纲的介绍帮助你的掌握,再附上颜色渐变直线,椭圆.圆中点Bresenham算法,双光源线框球Gouraud光照模型算法等基本操 ...

  6. 学计算机图形图像设计,计算机图形学与图形图像处理技术

    摘 要 本文通过对计算机图形学的研究内容.图形系统的组成以及功能进行分析,阐述了计算机图形技术以及计算机图像技术存在的区别,通过对计算机图形技术以及计算机图像技术的区别分析,得出两者在数据信息来源.处 ...

  7. python计算机图形学_图形图像学习随笔:计算机图形学的一些基本概念

    本文内容摘抄于:<计算机图形学的概念> 一.计算机图形学的范畴 1.图形主要分为两类,一类是基于线条信息表示的,如工程图.等高线地形图.曲面的线框图等:另一类是明暗图,也就是通常所说的真实 ...

  8. 计算机显示图形原理,计算机图形学:图形的计算与显示原理

    第1章 计算机图形学介绍 1 1.1 计算机图形学的发展 1 1.2 计算机图形学的应用 2 1.2.1 计算机辅助设计与制造 2 1.2.2 科学计算可视化 3 1.2.3 真实感图形绘制 3 1. ...

  9. 计算机图形学椭圆_椭圆算法| 计算机图形学

    计算机图形学椭圆 椭圆的性质 (Properties of ellipse) Ellipse is defined as the locus of a point in a plane which m ...

最新文章

  1. 从Nginx源码谈大小写字符转化的最高效代码以及ASCII码表的科学
  2. 推荐算法-聚类-DBSCAN
  3. 为什么在64位系统中指针的大小是8,而32位系统中却是4?
  4. (转载)关于stm32编译后的代码空间和ram占用
  5. c语言24点程序,C语言24点问题
  6. mysql group replication 安装配置详解
  7. SAP UI5 Simple form rendering
  8. 安装Mathcad过程中的问题——解决无法将注册值写入注册表
  9. bean创建异常_快速提示:消息驱动Bean中的异常处理
  10. vs怎么把textbox输入的实数放置变量里_方程的计算机处理96(3)_C++vs
  11. ENSP配置 实例五 RIP配置
  12. 仿新浪邮件输入自动提示jQuery插件
  13. 「代码随想录」213.打家劫舍II 【动态规划】力扣详解!
  14. HTML5 界面元素 Canvas 参考手册
  15. Java面试宝典2018
  16. AWS云上混沌工程实践之启动篇
  17. OpenSees二次开发实例01
  18. 超级详细讲解根文件系统rootfs的制作
  19. 字符转换 (15分)
  20. 记录为了使用Wechaty安装docker 中的一些问题

热门文章

  1. For Discuss
  2. 学习linux要多久?linux学习
  3. KDevelop修改字体样式和大小
  4. 微信公众平台开发前言
  5. 2023-6-2-DIS研究
  6. 汇桔联瑞 推动广州高新技术企业认证市场新趋势
  7. 电源管理 第二部分 ---- Windows CE设备驱动开发之电源管理
  8. Android FileProvider应用
  9. 挖掘原理|k近邻法原理
  10. Android自定义控件(UI,点击事件)