第3章二维线画讲义图元及属性
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线
象素
圆
3.1 直线的扫描转换及算法
在介绍画线算法之前,我们先讨论画直线的基本要求:
•直线必须有精确的起点和终点, •外观要直, •线宽应当均匀一致、且与直线的长度和方向无关, •算法速度要快。
3.1 直线的扫描转换及算法
直线方程:y=kx+b
k是直线的斜率,b是y方向的截距,若直线的两端点为(x0,y0)及(x1,y1),则
x =1 y =2/5=0.4 所以x方向上计长,走步数为5
Line: P0(0, 0)-- P1(5, 2) 3 2 1
0 12 3 4 5
取初值x0=0.5, y0=0.5 (保证四舍五入)
C=1 x1= x0+1=1.5,y1= y0+0.4=0.9 取点(1,0) C=2 x2= x1+1=2.5,y2= y1+0.4=1.3 取点(2,1) C=3 x3= x2+1=3.5,y3= y2 +0.4=1.7 取点(3,1) C=4 x4= x3+1=4.5,y4= y3+0.4=2.1 取点(4,2) C=5 x5= x4+1=5.5,y5= y4+0.4=2.5 取点(5,2)
若X0 <X1,则 x=1, y=k
若X0 >X1,则 x=-1, y=-k
(2)当|Dx|<|Dy|(即|k|>1)时 若X0 <X1,则 y=1, x=1/k 若X0 >X1,则 y=-1, x=-1/k
3.1.1 数值微分法
例:画直线段P0(0,0)--P1(5,2) Dx=x2-x1=5, Dy=y2-y1=2 Dx>Dy
Yi+1 = k Xi+1 + B
= k (Xi + x) + B = kXi + B + k x = Yi + k x
= Yi + k
i取自1开始的整数,顺次加1,直到最后的端点,y取最接近的整数
2.|k|>1,则应取y坐标的增量为y=1,可得如下X的增量方程: Xi+1 = Xi +1/ k
Bresenham算法是计算机图形学领域使用 最广泛的直线扫描转换算法。该方法最初 是为数字绘图仪设计的,后来被广泛地应 用于光栅图形显示和数控(NC)加工。该 算法构思巧妙,使得每次只需检测误差项 的符号就能决定直线上的下一个像素的位 置。
3.1.2 Bresenham画线算法
算法原理:过各行、各列像素中心构造一组虚拟网格线,按直线 从起点到终点的顺序计算直线与各垂直网格线的交点,然后确定 该列像素中与此交点最近的像素.
源自文库
3.开始端点在右端点,中止端点在左端点,则
x =-1 y=-1
Yi+1 = Yi - k Xi+1 = Xi -1/ k
3.1.1 数值微分法
算法过程: Dx=X1-X0 ; Dy=Y1-Y0
此两参数的绝对值哪一个大,哪一个就作为步长参数(n),此参数 将作为沿直线所画出点的数目 (1)当|Dx|>= |Dy|(即|k|<=1)时
像素:中心为网格点的圆点,距离均匀,相互不重叠
由像素表示的直线段为均匀填充的实心原点
3.1 直线的扫描转换及算法
一、点的生成
点是图形中最基本的图素,直线、曲线以及其它的图元都是 点的集合。在几何学中,一个点既没有大小,也没有维数,点只 是表示坐标系统中的一个位置。在计算机图形学中,点是用数值
坐标表示的。在直角坐标系中点由(x, y)两个数值组成的坐标表 示,在三维坐标系中点由(x, y, z)三个数值组成的坐标表示。
在输出设备上输出一个点,首先需要计算出该点的坐标位置 (最逼近该点的像素位置),其次需要把应用程序中的坐标信息 转换成所用输出设备的相应指令。
3.1 直线的扫描转换及算法
二、 直线的扫描转换
❖在数学上,理想的点和直线都是没有宽度的。但是,由于每个像素
对应于图形设备上的一个矩形区域,当我们在光栅图形设备上显示一 个点时,实际上它是有用一个发光的矩形区域来表示的;当在光栅图 形设备上显示一条直线时,我们只能在显示器所给定的有限个像素组 成的矩阵中,按扫描线顺序,依次确定最佳逼近于该直线的一组像素 ,并且对这些像素进行写操作。这个过程称为直线的扫描转换。
3.1 直线的扫描转换及算法
二、 直线的扫描转换
❖对于水平线、垂直线和45º斜线,选择哪些像素是显而易见的,但
是对于其它的直线,确定用哪些像素来表示它就不那麽简单了。本节 我们介绍用于直线扫描转换的常用算法:
•数值微分法 •Bresenham画线算法 •中点画线法
3.1 直线的扫描转换及算法
Geometric Graphics G={Pi | Pi--nearest pixel } 基本图形的生成算法任务之一就是找出所有的Pi 。
k=(y1-y0)/(x1-x0) b=y1-kx1 对于一直线,在x方向取间隔dx, 则可计算y方向的间隔dy dy=k×dx
该方法涉及到浮点数的乘除法、加减法以及取整运算,因此,效率非常低
3.1.1 数值微分法
数值微分法即DDA( Digital Differential Analyzer )
基本思想:先对一个方向的坐标取单位步长的变化,然后计算另一方向坐 标相应的变化值。
假定直线的起点、终点分别为:(X0,Y0), (X1,Y1),且都为整数。 则直线方程和斜率k为:
Y = k*X+B k = (Y1-Y0)/(X1-X0)
3.1.1 数值微分法
1.|k|<=1,则应取x坐标的增量为 x=1,可得如下Y的增量方程:
3.1.1 数值微分法
程序实现:
3.1.1 数值微分法
DDA算法的优点:
使用DDA算法,每生成一条直线做两次除法,每画线中一点做两 次加法。因此,用DDA法生成直线的速度是相当快的。
DDA算法的缺点:
在此算法中,x,y、k必须是float,且每一步都必须对x或y进行 舍入取整,不利于硬件实现。
3.1.2 Bresenham画线算法
第3章二维线画图元及属性
精品jing
易水寒江雪敬奉
第3章 二维线画图元及属性
3.1 直线的扫描转换及算法 3.2 圆和椭圆的扫描转换算法 3.3 其他输出图元的生成 3.4 输出图元的属性 3.5 字符的生成
3.1 直线的扫描转换及算法
扫描转换:从图形定义的物空间到进行显示处理的图像空间的转换 线画图元的扫描转换:计算出落在线段上或充分靠近它的一串像素, 并以此像素集近似替代连续直线段在屏幕上显示的过程。
象素
圆
3.1 直线的扫描转换及算法
在介绍画线算法之前,我们先讨论画直线的基本要求:
•直线必须有精确的起点和终点, •外观要直, •线宽应当均匀一致、且与直线的长度和方向无关, •算法速度要快。
3.1 直线的扫描转换及算法
直线方程:y=kx+b
k是直线的斜率,b是y方向的截距,若直线的两端点为(x0,y0)及(x1,y1),则
x =1 y =2/5=0.4 所以x方向上计长,走步数为5
Line: P0(0, 0)-- P1(5, 2) 3 2 1
0 12 3 4 5
取初值x0=0.5, y0=0.5 (保证四舍五入)
C=1 x1= x0+1=1.5,y1= y0+0.4=0.9 取点(1,0) C=2 x2= x1+1=2.5,y2= y1+0.4=1.3 取点(2,1) C=3 x3= x2+1=3.5,y3= y2 +0.4=1.7 取点(3,1) C=4 x4= x3+1=4.5,y4= y3+0.4=2.1 取点(4,2) C=5 x5= x4+1=5.5,y5= y4+0.4=2.5 取点(5,2)
若X0 <X1,则 x=1, y=k
若X0 >X1,则 x=-1, y=-k
(2)当|Dx|<|Dy|(即|k|>1)时 若X0 <X1,则 y=1, x=1/k 若X0 >X1,则 y=-1, x=-1/k
3.1.1 数值微分法
例:画直线段P0(0,0)--P1(5,2) Dx=x2-x1=5, Dy=y2-y1=2 Dx>Dy
Yi+1 = k Xi+1 + B
= k (Xi + x) + B = kXi + B + k x = Yi + k x
= Yi + k
i取自1开始的整数,顺次加1,直到最后的端点,y取最接近的整数
2.|k|>1,则应取y坐标的增量为y=1,可得如下X的增量方程: Xi+1 = Xi +1/ k
Bresenham算法是计算机图形学领域使用 最广泛的直线扫描转换算法。该方法最初 是为数字绘图仪设计的,后来被广泛地应 用于光栅图形显示和数控(NC)加工。该 算法构思巧妙,使得每次只需检测误差项 的符号就能决定直线上的下一个像素的位 置。
3.1.2 Bresenham画线算法
算法原理:过各行、各列像素中心构造一组虚拟网格线,按直线 从起点到终点的顺序计算直线与各垂直网格线的交点,然后确定 该列像素中与此交点最近的像素.
源自文库
3.开始端点在右端点,中止端点在左端点,则
x =-1 y=-1
Yi+1 = Yi - k Xi+1 = Xi -1/ k
3.1.1 数值微分法
算法过程: Dx=X1-X0 ; Dy=Y1-Y0
此两参数的绝对值哪一个大,哪一个就作为步长参数(n),此参数 将作为沿直线所画出点的数目 (1)当|Dx|>= |Dy|(即|k|<=1)时
像素:中心为网格点的圆点,距离均匀,相互不重叠
由像素表示的直线段为均匀填充的实心原点
3.1 直线的扫描转换及算法
一、点的生成
点是图形中最基本的图素,直线、曲线以及其它的图元都是 点的集合。在几何学中,一个点既没有大小,也没有维数,点只 是表示坐标系统中的一个位置。在计算机图形学中,点是用数值
坐标表示的。在直角坐标系中点由(x, y)两个数值组成的坐标表 示,在三维坐标系中点由(x, y, z)三个数值组成的坐标表示。
在输出设备上输出一个点,首先需要计算出该点的坐标位置 (最逼近该点的像素位置),其次需要把应用程序中的坐标信息 转换成所用输出设备的相应指令。
3.1 直线的扫描转换及算法
二、 直线的扫描转换
❖在数学上,理想的点和直线都是没有宽度的。但是,由于每个像素
对应于图形设备上的一个矩形区域,当我们在光栅图形设备上显示一 个点时,实际上它是有用一个发光的矩形区域来表示的;当在光栅图 形设备上显示一条直线时,我们只能在显示器所给定的有限个像素组 成的矩阵中,按扫描线顺序,依次确定最佳逼近于该直线的一组像素 ,并且对这些像素进行写操作。这个过程称为直线的扫描转换。
3.1 直线的扫描转换及算法
二、 直线的扫描转换
❖对于水平线、垂直线和45º斜线,选择哪些像素是显而易见的,但
是对于其它的直线,确定用哪些像素来表示它就不那麽简单了。本节 我们介绍用于直线扫描转换的常用算法:
•数值微分法 •Bresenham画线算法 •中点画线法
3.1 直线的扫描转换及算法
Geometric Graphics G={Pi | Pi--nearest pixel } 基本图形的生成算法任务之一就是找出所有的Pi 。
k=(y1-y0)/(x1-x0) b=y1-kx1 对于一直线,在x方向取间隔dx, 则可计算y方向的间隔dy dy=k×dx
该方法涉及到浮点数的乘除法、加减法以及取整运算,因此,效率非常低
3.1.1 数值微分法
数值微分法即DDA( Digital Differential Analyzer )
基本思想:先对一个方向的坐标取单位步长的变化,然后计算另一方向坐 标相应的变化值。
假定直线的起点、终点分别为:(X0,Y0), (X1,Y1),且都为整数。 则直线方程和斜率k为:
Y = k*X+B k = (Y1-Y0)/(X1-X0)
3.1.1 数值微分法
1.|k|<=1,则应取x坐标的增量为 x=1,可得如下Y的增量方程:
3.1.1 数值微分法
程序实现:
3.1.1 数值微分法
DDA算法的优点:
使用DDA算法,每生成一条直线做两次除法,每画线中一点做两 次加法。因此,用DDA法生成直线的速度是相当快的。
DDA算法的缺点:
在此算法中,x,y、k必须是float,且每一步都必须对x或y进行 舍入取整,不利于硬件实现。
3.1.2 Bresenham画线算法
第3章二维线画图元及属性
精品jing
易水寒江雪敬奉
第3章 二维线画图元及属性
3.1 直线的扫描转换及算法 3.2 圆和椭圆的扫描转换算法 3.3 其他输出图元的生成 3.4 输出图元的属性 3.5 字符的生成
3.1 直线的扫描转换及算法
扫描转换:从图形定义的物空间到进行显示处理的图像空间的转换 线画图元的扫描转换:计算出落在线段上或充分靠近它的一串像素, 并以此像素集近似替代连续直线段在屏幕上显示的过程。