直线的扫描转换
实验报告文档

done=TRUE;
}else if((code0.all&code1.all)!=0){
done=TRUE;
}else{
if(code0.all!=0){
x = x0; y = y0;
dx = x1 - x0; dy = y1 - y0;
d = dx - 2 * dy;
UpIncre=2*dx-2*dy;DownIncre=-2*dy;
while(x<=x1)
{
putpixel(x,y);
printf("x = %d , y = %d \n",x,y);
对剩余部分,把它作为新的线段看待,又从头开始考虑。两遍循环之后,就能确定该线段是部分截留下来,还是全部舍弃。
1、分区编码
延长裁剪边框将二维平面分成九个区域,每个区域各用一个四位二进制代码标识。各区代 码值如图中所示。
2、判别
根据C1和C2的具体值,可以有三种情况:
(1)C1=C2=0,表明两端点全在窗口内,因而整个线段也在窗内,应予保留。
(2)C1&C2≠0(两端点代码按位作逻辑乘不为0),即C1和C2至少有某一位同时为1,表明两端点必定处于某一边界的同一外侧,因而整个线段全在窗外,应予舍弃。
(3)不属于上面两种情况,均需要求交点。
3、求交点
假设算法按照:左、右、下、上边界的顺序进行求交处理,对每一个边界求完交点,并相关处理后,算法转向第2步,重新判断,如果需要接着进入下一边界的处理。
实验
类型
设计型
综合型
创新型
√
实
验
目
的
或
要
求
1.实验内容
计算机科学技术:计算机图形学题库三

计算机科学技术:计算机图形学题库三1、名词解释扫描转换答案:在矢量图形中,多边形用顶点序列来表示,为了在光栅显示器或打印机等设备上显示多边形,必须把它转换为点阵表示。
这种转换称为扫描转换。
2、单选下面对光栅扫描图形显示器描述正确的是()A.荧光粉涂层均匀离散分布;B.是一种点画设备;C.电子束从顶到底扫描;D.通过控制电子束的强弱实现色彩的强弱;答案:A3、填空题计算机图形系统由()系统和软件系统组成。
答案:硬件4、填空题在处理图形时常常涉及的坐标系有模型坐标系(),世界坐标系,观察坐标系,设备坐标系。
答案:局部坐标系5、单选计算机图形学与计算机图象学的关系是()。
A.计算机图形学是基础,计算机图象学是其发展B.不同的学科,研究对象和数学基础都不同,但它们之间也有可转换部分C.同一学科在不同场合的不同称呼而已D.完全不同的学科,两者毫不相干答案:B6、问答题简述中点分割法进行裁剪的过程?答案:中点分割剪取法,主要是对线段不断地进行对分,并排除在区域外的部分,找出线段落在窗口内的部分。
其方法主要是通过求出离线段的一个端点最近并且在区域内的点的方法,来确定线段落在窗口内的端点。
7、问答题局部光照模型和全局光照模型的不同之处是什么?答案:局部光照模型主要是考虑光源发出的光对物体的直接影响。
另外,全局光照模型除了处理光源发出的光之外,还考虑其他辅助光的影响,如光线穿过透明或半透明物体,以及光线从一个物体表面反射到另一个表面等。
8、判断题彩色阴极射线管主要是由红绿蓝三个彩色电子束的亮度不同,进而组合形成各种色彩的。
答案:错9、问答题什么叫做走样?什么叫做反走样?反走样技术包括那些?答案:走样指的是用离散量表示连续量引起的失真。
为了提高图形的显示质量。
需要减少或消除因走样带来的阶梯形或闪烁效果,用于减少或消除这种效果的方法称为反走样。
其方法是①前滤波,以较高的分辨率显示对象;②后滤波,即加权区域取样,在高于显示分辨率的较高分辨率下用点取样方法计算,然后对几个像素的属性进行平均得到较低分辨率下的像素属性。
第三章 基本图形的扫描转换讲解

本章学习目标
扫描转换的基本概念 Jack Elton Bresenham简介 直线的扫描转换算法 圆的扫描转换算法
本章内容
直线的扫描转换 圆的扫描转换 本章小结
直线、圆、椭圆是二维场景中的最基本图形。尽管 MFC的CDC类已经提供了相关的绘制函数,但直接使用 这些函数仍然无法满足真实感图形绘制的要求。光栅扫 描显示器是画点设备,基本图形的光栅化就是在像素点 阵中确定最佳逼近于理想图形的像素点集,并用指定颜 色显示这些像素点集的过程。当光栅化与按扫描线顺序 绘制图形的过程结合在一起时,也称为扫描转换。本章 从基本图形的生成原理出发,使用绘制像素点函数实现 基本图形的扫描转换。绘制像素点函数的原型为
1,
(di 0) (di 0)
(3-3)3.1.3 递推公式来自1.中点误差项的递推公式
M(x i+2,y i+1.5)
M(x i+2,y i+0.5)
Pu
Pu
Pi(xi,yi)
Pd
Pd
(a)di<0
Pi(xi,yi) (b)di≥0 中点的递推
(1)当d<0时
di1 F(xi 2, yi 1.5)
k y y1 y0 x x1 x0
直线水平方向位移 :
x x1 x0
直线垂直方向位移 :
y y1 y0
理想直线将平面划分成三个区域:对于直线上的 点,F(x,y)=0;对于直线上方的点,F(x,y)>0; 对于直线下方的点,F(x,y)<0。
假 设 直 线 的 斜 率 为 0≤k≤1 , 则 |△x|≥|△y| ,
y
O
x
圆的扫描转换
基于区域取样的直线扫描转换算法

摘
要: 区域取 样 是 最 简单 的反 走 样 方 法 , 将其 应 用 于直 线 的扫描 转 换 中, 通 过计 算 像素 与 直 线 重 叠 面积 改 变 像 素 的颜
色, 以达 到 直线 反走 样 的 目的 。针 对 区域取 样 中的重 叠面 积计 算 , 提 出基 于 扫描 线 的重 叠面 积计 算方 法 , 利用 扫描 线 的连 续 性 和直 线 图元 的连 续性 , 将 重 叠面 积转 换 为扫 描 线被 直线 所截 线段 长 度 的 叠加 , 克服 了传统 重 叠 面积计 算 方 法效 率低 的 问题 。该 方 法为 区域取 样 的重 叠 面积计 算开辟 了新 的思路 。
c a t i o n s , 2 0 1 3 , 4 9 ( 1 7 ) : 1 4 3 — 1 4 5 .
Abs t r a c t :Ar e a — s a mp l i n g i s t h e s i mp l e s t me ho t d f o r l i n e a n t i — a l i a s i n g . Ap p l i e d t o t h e l i n e s c a n c o n v e r s i o n , i t d e t e r mi n e s t h e p i x e l c o l o r b y c a l c u l a t i n g t h e o v e r l a p p i n g a r e a b e t we e n t h e pi x e l a n d t h e s t r a i g h t l i n e t o a c h i e v e t h e l i n e a n t i — a l i a s i n g . I n v i e w o f t h e o v e r l a p c a l c u l a t i o n , a n e w c o mp u t a t i o n a l me t h o d b a s e d o n t h e s c a n l i n e i s p r e s e n t e d i n t h i s p a p e r . Ut i l i z i n g t h e c o n t i n u i t y o f b o t h t h e s c a n l i n e a n d t h e l i n e a r p r i mi t i v e s , t h e me t h o d t u r n s t h e o v e r l a p a r e a i n t o t h e s u m o f t h e l e n g t h o f t h e s e g me n t s c u t b y t h e s t r a i g h t l i n e f r o m t h e s c a n l i n e , a n d o v e r c o me s t h e p r o b l e m o f l o w e ic f i e n c y o f t h e t r a d i t i o n a l o v e r l a p p i n g a r e a c a l c u l a t i o n
多段DDA直线扫描转换算法

技 术 创 新
根据定理和推论 $ 找到第一对满足 条件的点是第 I 个点和第 II 个 点 $ 这两点之 间的线 段 即 是 整 条 直 线 可 重 复 的 最 小 生 成 段 @C 轴 () 轴 的 平 移量分别为 /FID $:FQ% 以后的点可通过最小生成段平 移得到 % 如第 IP 个点通过第 P 个点平移 &ID@Q #$ 第 IR 个点通过第 R 个点平移 &ID@Q #$ 依次类推 $ 可画完所有 的点 %
您的论文得到两院院士关注
中 文 核 心 期 刊 ! 微 计 算 机 信 息 " ( 管 控 一 体 化 )2005 年 第 21 卷 第 8 期
设直线 ! 可以分为 !"#!$# # #!%&$ 共 % 段 $!" 为 最 小生成段 $!" 以后的每个点均可以由 !" 中的相应点平 移 实 现$但 在 算 法 设 计 过 程 中 $为 了 减 少 乘 法 次 数 采 用第 ’(’)$#*## #%&$+ 段由第 ’&$ 段平移实现 % 以 ,,算法为基础提出改进的算法如下 &
( 投稿日期 Y*""]EAEX+ ( 修稿日期 Y*""]EBE$+
? (2+ $ 在开始的第一个重复段内计算与 ,,- 算法相
同 $ 但是多出了用于重复段判断的两次浮点减法 和一 次比较运算 % 在以后的线段复制过程中 $ 每一 个点只
中国自控网 !http://www.autocontrol.com.cn &WX& 120 元 / 年 邮局订阅号 !82-946 !!!
电话 !010-62132436 "62192616 #T/F $ ! P LC 技术应用 200 例 "
直线扫描转换-中点算法

直线扫描转换-中点算法直线扫描转换-中点算法采⽤增量思想的DDA算法,直观、易实现,每计算⼀个象素坐标,只需计算⼀个加法。
(1)改进效率。
这个算法每步只做⼀个加法,能否再提⾼效率?⼀般情况下k与y都是⼩数,⽽且每⼀步运算都要对y进⾏四舍五⼊后取整。
唯⼀改进的途径是把浮点运算变成整数加法!(2)第⼆个思路是从直线⽅程类型做⽂章⽽直线的⽅程有许多类型,如两点式、⼀般式等。
如⽤其它的直线⽅程来表⽰这条直线会不会有出⼈意料的效果?中点画线法F(x,y) =0 直线的⼀般式⽅程:Ax+By+C=0其中A=Y1-Y2B=X2-X1C=X1Y2-X2Y1对于直线上的点: F(x,y)=0对于直线上⽅的点: F(x,y)>>0对于直线下⽅的点: F(x,y)<0每次在最⼤位移⽅向上⾛⼀步,⽽另⼀个⽅向是⾛步还是不⾛步要取决于中点误差项的判断.假定:0≤|k|≤1。
因此,每次在x⽅向上加1,y⽅向上加1或不变需要判断。
设U点为(x i+1,y i+1),D为(x i+1,y i),M(x i+1,y i+0.5)当M在Q的下⽅,则u 离直线近,应为下⼀个象素点, 当M在Q的上⽅,应取d 为下⼀点.如何判断Q在M的上⽅还是下⽅?把M代⼊理想直线⽅程:d i=A(x i+1)+B(y i+0.5)+C当d<0时,M在Q下⽅,取U当d>0时,M在Q上⽅,取D当d=0时,M在Q上,取UD均可(⼀般取D)⽤增量计算提⾼运算效率d0=A+0.5Bd1=d0+A+B d0<0d1=d0+A d0>=0y=y+1 d<0y=y d>=0可以⽤2d代替d来摆脱浮点运算,写出仅包含整数运算的算法。
当-1<k<0时的情况推导过程如下:第⼆个点应该是(5,0)结论如下: d0=-A+0.5Bd1=d0-A+B d0<0d1=d0-A d0>=0也可以⽤2d来摆脱浮点运算当1<k时的情况推导过程如下:注意:倒置后上下位置发⽣变化,因此x的取值和d的后续取值都发⽣变化结论如下: d0=0.5A+Bd1=d0+A+B d0>0d1=d0+B d0<=0x=x d<=0x=x+1 d>0也可以⽤2d来摆脱浮点运算当k<-1时的情况推导过程如下:下⾯的坐标应该是(3,0),从y0开始减。
计算机图形学基础试题

名词解释:1图形的扫描转换:确定最佳逼近图形的象素集合,并用指定的颜色和灰度设置象素的过程称为图形的扫描转换或光栅化。
2区域填充:区域填充指先将区域的一点赋予指定的颜色,然后将该颜色扩展到整个区域的过程。
3图形:通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成, 强调场景的几何表示,由场景的几何模型和景物的物理属性共同组成。
4直线的扫描转换:当我们对直线进行光栅化时,需要在显示器有限个象素中,确定最佳逼近该直线的一组象素,并且按扫描线顺序,对这些象素进行写操作,这个过程称为用显示器绘制直线或直线的扫描转换。
5剪裁:确定图形中哪些部分落在显示区之内,哪些落在显示区之外,以便只显示落在显示区内的那部分图形的选择过程称为裁剪。
6计算机图形学:计算机图形学是研究怎样用数字计算机生成、处理和显示图形的一门学科。
7种子填充算法:根据已知多边形区域内部的一个象素点来找到区域内其它象素点,从而对多边形区域内部进行填充。
8走样:在光栅显示设备上,由于象素点和象素点之间是离散的,因此用象素点阵组合出的图形,与真实景物之间必然存在一定的误差。
比如,直线或曲线往往呈现锯齿状,细小物体在图上显示不出来等。
这种现象就是图形的走样9CRT:一种真空器件,它利用电磁场产生高速的、经过聚焦的电子束,偏转到屏幕的不同位置轰击屏幕表面的荧光材料而产生可见图形。
10区域:是指已经表示成点阵形式的填充图形,它是像素集合。
11.图形和图象主要不同之处:在计算机图形学中,前者是指矢量表示的图,后者是指用点阵表示的图。
12.随机扫描和光栅扫描主要不同之处:前者是电子束扫描路径随图形不同而不同,后者是电子束扫描路径固定不变。
填空:1.刷新式CRT图形显示器按扫描方式分为随机扫描和光栅扫描两种。
2.屏幕上最小的发光单元叫做象素点,它的多少叫做分辨率,颜色深度指的是位平面的个数。
3.汉字字库一般可分为电阵字库和矢量字库两种。
4.在线段AB的区域编码裁剪算法中,如A、B两点的码均为零,则该线段位于窗口内;如A、B两点的码按位与不为零,则该线段在窗口外。
计算机图形处理基础

13
第二章 计算机图形处理基础
2.2 基本算法 2.2.4 区域填充 2.2.4.1 单一颜色的多边形区域填充 1、多边形区域填充基本内容 多边形区域填充的基本想法是:按顺 序计算扫描线与多边形的相交区间, 然后对这些区间的象素赋上相应的颜 色。
14ቤተ መጻሕፍቲ ባይዱ
第二章 计算机图形处理基础
2.2 基本算法 2.2.4 区域填充 2.2.4.1 单一颜色的多 边形区域填充 1、多边形区域填充基 本内容
15
第二章 计算机图形处理基础
2.2 基本算法 2.2.4 区域填充 2.2.4.1 单一颜色的多边形区域填充 1、多边形区域填充基本内容
多边形对于一条扫描线的处理步骤为: (1)计算扫描线与多边形的交点; (2)把所有交点按x坐标递增顺序进行排序; ( 3 )将排序的交点进行配对,确定欲填充的区间 。如第一点与第二点,第三点与第四点等。 (4)对配对区间内的象素进行相应的颜色设置。
7
第二章 计算机图形处理基础
2.2 基本算法 2.2.1直线的扫描转换 3、布莱森汉姆画线法
8
第二章 计算机图形处理基础
2.2 基本算法 2.2.2圆弧的扫描转换算法 1、中点画圆法
9
第二章 计算机图形处理基础
2.2 基本算法 2.2.2圆弧的扫描转换算法 2、布莱森汉姆画圆法
10
第二章 计算机图形处理基础
V2
M
U ( xu , y u )
W
V1
6
第二章 计算机图形处理基础
2.2 基本算法 2.2.1直线的扫描转换 3、布莱森汉姆画线法 本算法与中点画线法类似,通过在每列 像素中确定与理想直线位置最近的像素 来进行直线的扫描转换。 其基本原理为:通过各行、列像素点中 心构造一组虚拟网格线,按直线从起点 到终点的顺序计算其与各垂直网格线的 交点,然后确定该列像素中与此交点最 近的像素。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
点画线
小结
Bresenham画线法
距离差 NE 判定变量 符号判断 Pnew(xp+1 , yp+1) NE dupper 去除四舍五入运算 dlower dupper 增量算法 E dlower 去除乘法运算
P(xp , yp) E
增量思想 去除了决策变量更新中的乘法运算
pk incrNE pk 1 pk incrE
pk 0 取NE点 pn 0 取E点
算法小结
起始点
直线的左下端点
循环
x增 1 根据判定变量的符号决定下一个像素点位置 (y增1还是不增) 根据所选像素,用incrE或incrNE递增判定变量 的值
OpenGL 画线函数
#include <gl/glut.h> void mydisplay(){ glClearColor (1.0,1.0,0,0);//,设置背景色,默认为黑色 glClear(GL_COLOR_BUFFER_BIT);//清除帧缓存 glBegin(GL_LINE); glColor3f(1.0,0,0); glVertex2d(-0.5, -0.5); glVertex2d(-0.5, 0.5); glEnd(); glFlush(); }
(xi+1 , round(yi+m)) NE (xi , yi)
1 (xi+1 , yi+m) E (xi , round(yi)) m=0
利用规律
选点规则
利用距离差
判定标准
dupper、dlower的大小 dlower –dupper的符号
NE
dupper dlower
L1
P
E
利用规律
p=dlower –dupper p>0
取NE
L1
p<0
取E
NE
dupper
p=0
取NE
P
dlower
E
决策参数值
已选点P(xk,yk) NE(xk+1,yk+1) E(xk+1,yk) dlower=y-yk dupper=yk+1-y pk= △x(dlower –dupper) pk=2△y*xk-2△x*yk+c
数值微分法——DDA算法 Bresenham画线算法
基本观察
m =∞ m =1
m =0
m =-1
基本观察
斜率m在-1和1之间 x每次走一步
从x=x0到x=x1的每一列
m =1
P(xp,yp) 在x=xp+1的列上有一个像素
m =-1
基本观察
斜率m在-1和1之外 y每次走一步
GL_POLYGON
简单的凸多边形的边界
点的细节
控制点的大小
void glPointSize(GLfloat size) glPointSize(3.0); 默认状态下为1.0
直线的细节
指定线宽
void glLineWidth(GLfloat width) 默认状态下为1.0
void LineBres (int x0, int y0, int xEnd, int yEnd) { int dx=fabs(xEnd-x0),dy=fabs(yEnd-y0); int p=2*dy-dx; int incrE=2*dy; int incrNE=2*(dy-dx); int x,y; if(x0>xEnd) { x=xEnd;y=yEnd; xEnd=x0; } else { x=x0;y=y0; } setPixel(x,y); while(x<xEnd) { x++; if(p<0) p+=incrE; else {y++; p+=incrNE;} setPixel(x,y); } }
NE Pnew(xk+1,yk+1)
dupper dlower
NE
dupper dlower
L1
E
P(xk,yk)
E
更新决策变量
pk<0 取E点 Pnew(xk+1,yk) pk+1-pk=2△y
NE NE
dupper dlower dupper dlower L1
P(xk,yk)
E k) Pnew(xk+1,y E
终止点
直线的右上端点
初始化
已知:直线的两个端点坐标 初始决策变量 决策变量的两个增量incrE、incrNE 决策变量
初始化 选定点——端点P0(x0,y0) 初始判定变量
p0=2△y-△x
incrE= 2△y incrNE= 2△y-2△x
NE dupper dlower P0(x0 , y0) E
终止点
直线的右上端点
E
更新决策变量
pk=2△y*xk-2△x*yk+c pk+1=2△y*(xk+1)-2△x*(yk+1)+c pk+1-pk=2△y- 2△x(yk+1-yk) 增量算法
NE
dupper dlower
L1
P(xk,yk)
E
更新决策变量
pk≥0 取NE点 Pnew(xk+1,yk+1) pk+1-pk=2△y-2△x
4
5
x
p=p+ incrE=1, SetPixel(3,1)
p=1>0, 取NE点
p=-5<0, 取E点
p=p+incrE=-1, SetPixel(5,2)
p=p+incrNE=-5, SetPixel(4,2)
算法分析
速度快
没有浮点运算 没有函数调用运算
质量好
误差小 像素分布均匀
i i
m
DDA算法
void DDALine (int x0, int y0, int x1, int y1, COLORREF color) { CClientDC dc(this); int x; double dx = x1 –x0; double dy = y1-y0; double m= dy/dx; double y=y0; for (x=x0;x <=x1;x++) { dc.SetPixel( x,int(y+0.5), color); y+=m; } }
从y=y0到y=y1的每一列
m =1
P(xp,yp) 在y=yp+1的列上有一个像素
m =-1
最简单的策略
直线方程
y=mx+b
xi+1=xi+1 yi+1=mxi+1+b y值是浮点数 四舍五入 效率太低
(xi+1 , round(yi+1))
( x i , y i)
(xi+1 , yi+1)
L1
NE
dupper
dlower
P(xk,yk)
E
Bresenham算法
起始点
直线的左下端点
循环
x增1 根据判定变量的符号决定 y增1还是不增 Pnew(xn+1 , yn+1) NE 斜率增量——整数增量 更新判定变量的值 NE dupper dlower dupper dlower P(xn , yn) E
基本图形生成——直线
内容安排
扫描转换的概念 直线的扫描转换算法
为什么需要扫描转换? 光栅显示器 画点设备
离散 近似表示 帧缓存
扫描转换的概念
扫描转换
确定一个像素集合 并确定其颜色,用 于显示一个图形的 过程
扫描转换 第一步:确定有关像素 第二步:用图形的颜色或其他属性,对像 素进行写操作。
扫描转换算法
必要性
每次生成或修改过程都需要调用扫描转换
要求
度快 质量好
直线的扫描转换
如何确定直线段
直线段的起点和终点 端点坐标为整数
如何确定最佳逼近直线的像素点? 线宽为1
直线的扫描转换 代数方程
y=mx+b F(x,y)=ax+by+c=0
直线的扫描转换
浮点乘法、加法 (xi , round(yi))
DDA算法
增量思想
xi+1=xi+1 yi+1=mxi+1+b =m(xi+1)+b =mxi+b+m (xi+1 , round(yi+m)) =yi+m 每一步的值都可以根 据前一步的值加上一 (xi , yi) (xi+1 , yi+m) 个增量得到 y值是浮点数 去掉了乘法 (x , round(y ))
算法演示
SetPixel(0,0) ,y=0.4 y SetPixel(1,0) ,y=0.8
2 1
SetPixel(2,1) ,y=1.2
SetPixel(3,1) ,y=1.6
0
1
2
3
4
5
x SetPixel(4,2) ,y=2
SetPixel(5,2) , y=2.4
算法演示
DDA算法特点 优点
算法简单 容易实现
缺点
浮点运算 四舍五入 误差积累
算法示例
斜率在0、1之间
k =1
k =0
探讨规律
斜率增量m 整数增量0或1
x=xi x=xi+1 m=1
yi≤yi+1 ≤yi+1