基本图形生成算法解读
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
13 2020/11/14
例:画直线段P0(0,0)--P1(5,2)
k y1 y0 x1 x0
解:斜率K=2/5=0.4,所以X方 向每次步长为1,Y方向递增K。初 始点为(0,0)。
x int(y+0.5) y
00
0
10
0.4
21
0.8
31
1.2
42
1.6
52
2.0
Line: P0(0, 0)-- P1(5, 2) 3 2 1
在数学上,理想的直线是没有宽度的、由 无数个点构成的集合。当我们对直线进行光栅 化时,只能在显示器所给定的有限个像素组成 的矩阵中,确定最佳逼近该直线的扫描转换。
通常用于直线光栅化的算法有数值微分法( DDA)、中点画线法和Bresenham画线算法 。
r浮点数取整 : yi=round(yi)=(int)(yi+0.5)
12 2020/11/14
3.2.1 数值微分法(DDA法)
因:
有:
k y1 y0 x1 x0
yi+1=yi+k• △X
r若0<k<1,即x > y
q因光栅单位为1, q可以采用每次x方向增加1,
演示 说明
q而y方向增加k的办法得到下一个直线点。
dx=x1-x0; dy=y1-y0;
2
k=dy/dx;
y=y0;
1
for(x=x0;x<=x1;)
{
0 12 3 4 5
drawpixel(x,int(y+0.5),Color);
x++;
y=y+k;
}
}
2020/11/14
15
3.2.1 数值微分法(DDA法)
通常情况下,直线的 方向分为8个不同的区域, 每个区域的处理方法有所不 同。K=△y/△x
3.1 图形生成的概念
点的生成
点是图形中最基本的图元,直线、曲线以及其它的图元都是 点的集合。
在几何学中,一个点既没有大小,也没有维数,点只是表示 坐标系统中一个位置。
在计算机图形学中,点是用数值坐标来表示的。在直角坐标 系中点由(x,y) 两个数值组成的坐标表示,在三维坐标系中点 是由(x,y,z)三个数值组成的坐标表示。
在输出设备上输出一个点,就要把应用程序中的坐标信息转 换成所用输出设备的相应位置。对于一个CRT监视器来说,输出 一个点就是要在指定的屏幕位置上打上电子束,使该位置上的荧 光点亮。
在PC机中,点亮屏幕上一个点是由BIOS控制完成的,各种程 序语言中都有描点语句。例如C语言为putpixel(x,y,color) ,putpixel(放,摆-像素)。
问题:每步需要用到浮点数的 乘法、加法和取整运算,效 率不高。怎么办??
11 2020/11/14
3.2.1 数值微分法(DDA法)
增量算法 因为: y=kx+b,所以:
yi+1=kxi+1+b=k(xi+1)+b=kxi+b+k =yi+k (xi,yi)→(xi+1,yi+k)
r例图中 k<1 △X=1 △Y=k r将算得的直线上每个点的当前坐标,按四舍五入得到光栅点的位置
0 12 3 4 5
yi+1=yi+k
当 k 1时,必须把x,y地位互换
2020/11/14
14
程序实现:
void DDALine(int x0,int y0,int x1,int y1,int color)
{ int x; float dx,dy,k,y;
Line: P0(0, 0)-- P1(5, 2) 3
区域
dx
dy
1a(1)
1
k
1b(2)
1/k
1
2a(4)
-1
k
2b(3)
-1/k
1
3a(5)
-1
-k
3b(6)
-1/k
-1
4a(8)
1
-k
4b(7)
1/k
-1
2020/11/14
16
3.2.1 数值微分法(DDA法)
2020/11/14
17
数值微分法(DDA法)——特点
增量算法 直观、易实现 不利于用硬件实现
8
3.2 直线的扫描转换
解 决 的 问 题 : 给 定 直 线 两 端 点 P0(x0,y0) 和
P1(x1,y1),画出该直线。 数值微分法(DDA算法) 中点画线算法 Bresenhan算法
2020/11/14
9
3.2.1 数值微分法(DDA法)
DDA(Digital Differential Analyzer)画线算法也 称数值微分法,是一种增量算法。它的算法实质是用数值方法 解微分方程,通过同时对x和y各增加一个小增量,计算下一 步的x、y值。
2020/11/14
6
直线光栅化算法
直线段生成 求与直线段充分接近的像素集
2020/11/14
7
3.2 直线的扫描转换
直线的绘制要求 (1)直线要直; (2)直线的端点要准确,无定向性无断裂; (3)直线的亮度、色泽要均匀; (4)画线的速度要快; (5)具有不同的色泽、亮度、线型等。
2020/11/14
第3章 基本图形生成算法
如何在指定的输出设备上根据坐标描述构造基 本几何图形(点、直线、圆、椭圆、多边形域、 字符串及其相关属性等)?
1 2020/11/14
第3章 基本图形生成算法
图形生成的概念 直线段的扫描转换 圆的扫描转换 多边形的扫描转换与区域填充 属性处理 反走样技术
2 2020/11/14
已知一条直线段L(P0, P1),其端点坐标为:P0 (x0, y0), P1(x1, y1)。可计算出直线的斜率k为:
k y1 y0 x1 x0
10 2020/11/14
3.2.1 数值微分法(DDA法)
假定端点坐标均为整数,取 直线起点P0 (x0, y0)作为初 始坐标。画线过程从x的左端 点x0开始,向x右端点步进, 每步x递增1,计算相应的y 坐标, y=kx+b,取像素点 (x,round(y))作为当 前点的坐标。
3 2020/11/14
3.1 图形生成的概念
图形的生成:是在指定的 输出设备上,根据坐标描 述构造二维几何图形。
图形的扫描转换:在光栅 显示器等数字设备上确定 一个最佳逼近于图形的像 素集的过程。
用像素点集逼近直线
2020/11/14
4
3.1 图形生成的概念
2020/11/14
5
3.2 直线的扫描转换
2020/11/14
18
3.2.2 中点画线算法
中点画线算法的基本思想
为了讨论方便,假设直线的斜率在0到1