第3章 基本图形生成算法2
合集下载
第三章 图形生成图像的基本原理

(y,-x) (x,-y)
程序:
MidCircle18(int r) { int x,y; float f; x=0; y=r; f=1.25-r; //注意f为下一点(1,r-0.5)的判别式 point(x,y); while(x<=y) { if(f<0) f+=2*x+3; else { f+=2*(x-y)+5; y--;} x++; point(x,y); } }
第三章 图形生成图像的基本原理
3.1 图形图像的关系:
1)区别: 图形是用矢量表示的,是用几何学的点、线、面对客观世界建模的 结果。图形中不但包含几何信息,而且可以包含拓扑、颜色等非几何信 息。这些信息是设备无关的。 图像是用点阵表示的,其中只有各个点的颜色信息,不含拓扑关系, 也没有几何学的点、线、面。从数学上说,图像是定义域和值域都不连 续的一个函数(数字图像)。 图形和图像各有其优点,图形适合表达几何信息(建模),图像适 合表达视觉信息(照片)。 2)存储: 图形使用矢量文件,图像使用点阵文件。 3)转换关系: 图形通过光栅扫描可以转化为光栅图像;图像通过识别和处理可以 转化为矢量表示的图形形式,但通常它无法恢复图形信息。
实例:用DDA方法在点(0,0)和(5,2)之间画线
n=5 (x0,y0) = (0,0) (xn,yn) = (5,2) k=(2-0)/(5-0) = 0.4
xi 0 1 2 3 4 5
yi 0.0 0.4 0.8 1.2 1.6
int(yi+0.5) 0 1 1 2 2
动画
2)Bresenham算法 (最常用)
对于内点表示和边界表示的8连通区域的填充,只要将上述相应代码 中递归填充相邻的4个象素增加到递归填充8个象素即可。
3基本图形生成算法

若d>=0, 取P2为下一象素,再下一象素的判别式为
d' F(xp 2, yp 1.5) (xp 2)2 (yp 1.5)2 R2 d 2(xp yp ) 5
初始象素是(0,R),判别式d的初值为
d0 F(1, R 0.5) 1.25 R
使用e=d-0.25代替d e0=1-R
y方向不走步
e
e’
P
P1
Bresenham画线算法(4/6)
为方便与0比较,设e=e-0.5
e0=-0.5 当e≥0时,最接近P2(xi+1,yi+1)
y方向走一步 当e<0时,最接近P1(xi+1,yi)
y方向不走步 有浮点数,不宜硬件实现
P2
e’
e P P1
P2
e
e’
P
P1
Bresenham画线算法(5/6)
=2 (i-xi)-1
若dDV’<0,则选D 若dDV’>0,则选V 若dDV’=0,则选D
情形④也 适用
Bresenham画圆算法(5/7)
当i=0时,D在圆上,⑤ 按d判别,有d>0,应选D 按d’判别,有d’<0,应选D
Bresenham画圆算法(6/7)
当i<0时,
若dHD≤0,选H 若dHD>0,选D
=(xi+1)2+yi2-R2 + (xi+1)2+(yi-1)2-R2
=2 (i+yi)-1
若dHD <0,则选H 若dHD >0,则选D 若dHD =0,则选H
情形②也 适用
Bresenham画圆算法(4/7)
当i>0时,D在圆外,③④
第3章 图形的基本算法

dy s t 2 ( x i 1 1) 2 y i 1 1 dx
dx(s t ) 2( xi 1 dy y i 1 dx) 2dy dx
因dx>0,所以我们可以以dx(s-t) 的正负作 为选择点的依据。若令其为di,则
d i 2( xi 1 dy y i 1 dx) 2dy dx
若s<t,则Si较靠近理论直线,应选Si,y 不变; 若s>t,则Ti较靠近理论直线,应选Ti,y 增1。 现在需要一个判别式,来判断每一步是选 Ti还是选Si。下面导出Bresenham 算法的 判别式。
判别式的导出
设一直线段由(x1,y1)至(x2,y2),(其中 y2>y1,x2>x1)则直线方程可表示为
怎样选择直线的最佳光栅位置(象素点), 是Bresenham 算法追求的目标。为此,算 法根据直线的斜率在计长方向(x或y)上, 每次都递增一个单位步长即一个象素单位, 另一个方向的增量为0或1。这种算法的巧 妙之处是只需检查判别式的符号即可,而 且计算量很小,只进行整型数计算,不必 做舍入操作。
直线的近似表示
第三章 图形的基本算法
本章内容
3.1 图形的表示 3.2 图形模式与坐标系 3.3 直线的扫描转换 3.4 圆的生成算法 3.5 多边形的填充
3.1 图形的表示
计算机图形学是一门复杂而又多样化的技 术。要想了解这项技术必须把它分成几个 易于操作的部分。图形是计算机图形学的 关键概念,处理图形我们应考虑以下问题: 1. 如何在计算机中表示图形? 2. 如何准备图形的数据? 3. 如何显示准备好的图形? 4. 如何实现人与图形的交互?
这里,图形是一个广义的概念,凡是可 以在图形设备上输出的点、线、文本等 的集合都可以称为是图形。
计算机图形学第3章-基本光栅图形生成算法

• 用绘图软件包 • OpenGL就是一个典型的、已经被接受的国际工业标 准的图形软件包。 • Java3D
• 用操作系统的绘图功能 • 如Windows中Win32API中就提供了基本的绘图功能
• 在数学上,理想的直线是一条由无穷多个无限小的连续的 点组成。
• 在光栅显示平面上,我们只能用二维光栅格网上尽可能靠 近这条直线的象素点的集合来表示它。每个象素具有一定 的尺寸,是显示平面上可被访问的最小单位,它的坐标x 和y只能是整数,也就是说相邻象素的坐标值是阶跃的而不 是连续的。
������������ − ������������ = 20
第二步:在x轴方向上每次的变化量为∆������ 变化量为∆������ = ������������−������������ = 0.65
=
������������−������������ ������
=
−1,则y轴方向的
������
• DDA算法描述
• 设(xs,ys)和(xe,ye)分别为直线的起点坐标和终点坐标,则:
直线的斜率
=
∆������ ∆������
=
������������ ������������
− −
������������ ������������
• 可通过计算由x方向的增量 ∆������ 引起y的改变来生成直线。
由������������+1 = ������������ + ∆������,得到:
������������+1
=
������������
+
������ ������
×
∆������
=
������������
• 用操作系统的绘图功能 • 如Windows中Win32API中就提供了基本的绘图功能
• 在数学上,理想的直线是一条由无穷多个无限小的连续的 点组成。
• 在光栅显示平面上,我们只能用二维光栅格网上尽可能靠 近这条直线的象素点的集合来表示它。每个象素具有一定 的尺寸,是显示平面上可被访问的最小单位,它的坐标x 和y只能是整数,也就是说相邻象素的坐标值是阶跃的而不 是连续的。
������������ − ������������ = 20
第二步:在x轴方向上每次的变化量为∆������ 变化量为∆������ = ������������−������������ = 0.65
=
������������−������������ ������
=
−1,则y轴方向的
������
• DDA算法描述
• 设(xs,ys)和(xe,ye)分别为直线的起点坐标和终点坐标,则:
直线的斜率
=
∆������ ∆������
=
������������ ������������
− −
������������ ������������
• 可通过计算由x方向的增量 ∆������ 引起y的改变来生成直线。
由������������+1 = ������������ + ∆������,得到:
������������+1
=
������������
+
������ ������
×
∆������
=
������������
基本图形元素的生成算法

计 算 机 图 形 学
第三章 基本图形元素的生成算法
计 算 机 图 形 学
光栅显示器上显示的图形,称之为光栅图形。光 栅显示器可以看作是一个象素矩阵,在光栅显 示器上显示的任何一个图形,实际上都是一些 像素的集合。由于对一个具体的光栅显示器来 说,象素个数是有限的,象素的颜色和灰度等 级也是有限的,象素是有大小的,所以光栅图 形只是近似的实际图形。如何使光栅图形最完 美地逼近实际图形,便是光栅图形学要研究的 内容。确定最佳逼近图形的像素集合的过程称 为图形的扫描转换或光栅化。
计 算 机 图 形 学
第三章 基本图形元素的生成算法
a)
b)
图3.2 直线的生成
c)
计 算 机 图 形 学
直线的绘制首先要考虑的是绘制的质量。怎样才算高质量? 当然,看上去要象直线。 : 1. 画的直线应是直的 2. 线的端点位置应正确 3. 线的浓度应均匀 4. 直线生成的速度要快
第三章 基本图形元素的生成算法
(X1,Y1)的像素点,对应的显示缓冲器地址为: 字节地址= S + ( H / 8 ) * Y1 + ( X1 / 8 ) 的整数部分 字节内的位地址= X1 / 8 的余数 计 算 机 图 形 学
第三章 基本图形元素的生成算法
3.1.2 直线段的生成
数学上的直线是由无数个点构成的集合,显 然,光栅显示器只能近地似显示直线。对 于水平、垂直和45°斜线是可以达到较为 满意的效果的。当我们对直线进行光栅化 时,需要确定最佳逼近该直线的一组象素。 扫描转换直线段就是计算出落在直线段上 或充分靠近它的一串像素,并以此像素近 似代替原连续直线段在屏幕上显示的过程。
第三章 基本图形元素的生成算法
3.1直线的生成算法
计算机图形学-基本图形生成算法-图形反混淆

10
Ú3.区域采样技术
– 改变边或直线的外观,模糊淡化阶梯 – 相当于图像的前置滤波
直线有宽度
点
有限
区域
2020/6/11 星期四
计算机学院 苏小红
9
图形反走样技术(antialiasing)
根据相交的面积值决定像素显示的亮度级别
8级灰度
2020/6/11 星期四
0≤面积≤1/8
计算机学院 苏小红
7/8≤面积≤1
计算机学院 苏小红
混淆现象(1/3)
Ú不光滑(阶梯状)的图形边界
计算机学院 苏小红
混淆现象(2/3)
Ú图形细节失真
计算机学院 苏小红
混淆现象(3/3)
Ú狭小图形的遗失与动态图形的闪烁
计算机学院 苏小红
图形反走样技术( antialiasing)
Ú 1.从硬件角度提高分辨率
– 高分辨率显示器
Ú 显示器点距减少一倍 Ú 帧缓存容量增加到原来的4倍 Ú 输带宽提高4倍 Ú 扫描转换花4倍时间 Ú 代价高
第三章 基本图形生成算法 图形反混淆
二维光栅图形的混淆与反混淆
Ú混淆现象 Ú反混淆方法
计算机学院 苏小红
混淆(antialiasing)
图形的锯齿状:图形信号连续,光栅显示系统中,离散 表示。
用离散量(像素)表示连续的量(图形)而引起的失真,叫 混淆或叫走样(aliasing)
光栅图形混淆: Ú 阶梯状边界; Ú 图形细节失真; Ú 狭小图形遗失:动画序列中时隐时现,产生闪烁。
计算机学院 苏小红
图形反走样技术( antialiasing)
Ú 2.从软件角度替高分辨率
– 高分辨率计算,低分辨率显示 – 像素细分技术,相当于后置滤波
Ú3.区域采样技术
– 改变边或直线的外观,模糊淡化阶梯 – 相当于图像的前置滤波
直线有宽度
点
有限
区域
2020/6/11 星期四
计算机学院 苏小红
9
图形反走样技术(antialiasing)
根据相交的面积值决定像素显示的亮度级别
8级灰度
2020/6/11 星期四
0≤面积≤1/8
计算机学院 苏小红
7/8≤面积≤1
计算机学院 苏小红
混淆现象(1/3)
Ú不光滑(阶梯状)的图形边界
计算机学院 苏小红
混淆现象(2/3)
Ú图形细节失真
计算机学院 苏小红
混淆现象(3/3)
Ú狭小图形的遗失与动态图形的闪烁
计算机学院 苏小红
图形反走样技术( antialiasing)
Ú 1.从硬件角度提高分辨率
– 高分辨率显示器
Ú 显示器点距减少一倍 Ú 帧缓存容量增加到原来的4倍 Ú 输带宽提高4倍 Ú 扫描转换花4倍时间 Ú 代价高
第三章 基本图形生成算法 图形反混淆
二维光栅图形的混淆与反混淆
Ú混淆现象 Ú反混淆方法
计算机学院 苏小红
混淆(antialiasing)
图形的锯齿状:图形信号连续,光栅显示系统中,离散 表示。
用离散量(像素)表示连续的量(图形)而引起的失真,叫 混淆或叫走样(aliasing)
光栅图形混淆: Ú 阶梯状边界; Ú 图形细节失真; Ú 狭小图形遗失:动画序列中时隐时现,产生闪烁。
计算机学院 苏小红
图形反走样技术( antialiasing)
Ú 2.从软件角度替高分辨率
– 高分辨率计算,低分辨率显示 – 像素细分技术,相当于后置滤波
第3章基本图形的生成与计算

1.数值微分法(DDA法)
2.中点画线算法
3.直线的Bresenham算法
2021年3月4日星期四
14
3.2 直线段的生成算法
第3章 基本图形的生成与计算
画一条从(x1,y1)到(x2,y2)的直线,实质上是确定 最佳逼近直线的像素序列,并填入色彩数据的过程。
当我们对直线进行光栅化时,只能在显示器所给定的 有限个象素组成的矩阵中,确定最佳逼近于该直线的一 组象素,并且按扫描线顺序,对这些象素进行写操作, 这就是通常所说的用显示器绘制直线或直线的扫描转换。
2021年3月4日星期四
10
3.1 基本绘图元素
第3章 基本图形的生成与计算
✓ 1.在几何学中,一个点即没有大小,也没有维数,点只是 表示坐标系统中的一个位置。
✓ 2.在计算机图形学中,点是用数值坐标来表示的。在直角 坐标系中点由(x,y)两个数值组成的坐标表示,在三维坐 标系中点由(x,y,z)三个数值组成的坐标表示,如下图:
此时 |K|<1
本算法的基本思想:从直线的起点开始,选定 x2 x1 和
y2 y1 中较大者为步进方向,不妨假设 x2 x1 较大,即让 x从起点到终点变化,每步递增1(即一个像素单位),然
后利用递推式 yi1 yi kx 计算相应的y值,取像素
点 ( xi 1, round ( yi1) )作为当前点坐标输出到显示器上, 则得到光栅化的直线。
第3章 基本图形的生成与计算
Loading …………
欢迎进入
第 3章
第3章 基本图形的生成与计算
本章概述:主要介绍了基本图形的生成与计
算,包括:基本绘图元素,直线段、圆与椭圆的 生成算法,区域填充算法,字符的生成,图
2.中点画线算法
3.直线的Bresenham算法
2021年3月4日星期四
14
3.2 直线段的生成算法
第3章 基本图形的生成与计算
画一条从(x1,y1)到(x2,y2)的直线,实质上是确定 最佳逼近直线的像素序列,并填入色彩数据的过程。
当我们对直线进行光栅化时,只能在显示器所给定的 有限个象素组成的矩阵中,确定最佳逼近于该直线的一 组象素,并且按扫描线顺序,对这些象素进行写操作, 这就是通常所说的用显示器绘制直线或直线的扫描转换。
2021年3月4日星期四
10
3.1 基本绘图元素
第3章 基本图形的生成与计算
✓ 1.在几何学中,一个点即没有大小,也没有维数,点只是 表示坐标系统中的一个位置。
✓ 2.在计算机图形学中,点是用数值坐标来表示的。在直角 坐标系中点由(x,y)两个数值组成的坐标表示,在三维坐 标系中点由(x,y,z)三个数值组成的坐标表示,如下图:
此时 |K|<1
本算法的基本思想:从直线的起点开始,选定 x2 x1 和
y2 y1 中较大者为步进方向,不妨假设 x2 x1 较大,即让 x从起点到终点变化,每步递增1(即一个像素单位),然
后利用递推式 yi1 yi kx 计算相应的y值,取像素
点 ( xi 1, round ( yi1) )作为当前点坐标输出到显示器上, 则得到光栅化的直线。
第3章 基本图形的生成与计算
Loading …………
欢迎进入
第 3章
第3章 基本图形的生成与计算
本章概述:主要介绍了基本图形的生成与计
算,包括:基本绘图元素,直线段、圆与椭圆的 生成算法,区域填充算法,字符的生成,图
第三讲基本图形生成

`
两种定义方法: 1)像素理想化为点
2)像素有一定面积
`
2013年8月13日11时54分
倘若已知直线段两端点的坐标(x0,y0)(x1,y1), 如何求得屏幕上显示的各点的坐标?
2013年8月13日11时54分
根据直线方程表达式: y=m×x+b 其中:m是直线的斜率, b是y方向的截距。
2013年8月13日11时54分
(x,y)坐标
…
地址线性表 1D表示 显示屏幕 2D表示
像素由其左下角坐标表示
y ymax ymin x
xmin
xmax
地址 = (xmax-xmin) * (y-ymin) + (x-xmin) + 基地址
每行像素点数
行数
行中位置
Address(x,y) = (xmax-xmin) * (y-ymin) + (x-xmin) + 基地址 = k1 + k2y + x 对像素连续寻址时,如何减少计算量? Address(x±1,y) = k1 + k2y + (x±1) = Address(x,y) ± 1 Address(x,y±1) = k1 + k2(y ±1) + x = Address(x,y) ± k2 Address(x±1,y±1) = k1 + k2(y ±1) + (x±1)
直线Bresenham算法描述
由图中可以知道:在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 d2=(yi+1)-y=(yi+1)-m(xi+1)-b 两个距离差是 d1-d2=2m(xi+1)-2yi+2b-1
两种定义方法: 1)像素理想化为点
2)像素有一定面积
`
2013年8月13日11时54分
倘若已知直线段两端点的坐标(x0,y0)(x1,y1), 如何求得屏幕上显示的各点的坐标?
2013年8月13日11时54分
根据直线方程表达式: y=m×x+b 其中:m是直线的斜率, b是y方向的截距。
2013年8月13日11时54分
(x,y)坐标
…
地址线性表 1D表示 显示屏幕 2D表示
像素由其左下角坐标表示
y ymax ymin x
xmin
xmax
地址 = (xmax-xmin) * (y-ymin) + (x-xmin) + 基地址
每行像素点数
行数
行中位置
Address(x,y) = (xmax-xmin) * (y-ymin) + (x-xmin) + 基地址 = k1 + k2y + x 对像素连续寻址时,如何减少计算量? Address(x±1,y) = k1 + k2y + (x±1) = Address(x,y) ± 1 Address(x,y±1) = k1 + k2(y ±1) + x = Address(x,y) ± k2 Address(x±1,y±1) = k1 + k2(y ±1) + (x±1)
直线Bresenham算法描述
由图中可以知道:在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 d2=(yi+1)-y=(yi+1)-m(xi+1)-b 两个距离差是 d1-d2=2m(xi+1)-2yi+2b-1