计算机图形学(直线的扫描转换I)

合集下载

计算机科学技术:计算机图形学题库三

计算机科学技术:计算机图形学题库三

计算机科学技术:计算机图形学题库三1、名词解释扫描转换答案:在矢量图形中,多边形用顶点序列来表示,为了在光栅显示器或打印机等设备上显示多边形,必须把它转换为点阵表示。

这种转换称为扫描转换。

2、单选下面对光栅扫描图形显示器描述正确的是()A.荧光粉涂层均匀离散分布;B.是一种点画设备;C.电子束从顶到底扫描;D.通过控制电子束的强弱实现色彩的强弱;答案:A3、填空题计算机图形系统由()系统和软件系统组成。

答案:硬件4、填空题在处理图形时常常涉及的坐标系有模型坐标系(),世界坐标系,观察坐标系,设备坐标系。

答案:局部坐标系5、单选计算机图形学与计算机图象学的关系是()。

A.计算机图形学是基础,计算机图象学是其发展B.不同的学科,研究对象和数学基础都不同,但它们之间也有可转换部分C.同一学科在不同场合的不同称呼而已D.完全不同的学科,两者毫不相干答案:B6、问答题简述中点分割法进行裁剪的过程?答案:中点分割剪取法,主要是对线段不断地进行对分,并排除在区域外的部分,找出线段落在窗口内的部分。

其方法主要是通过求出离线段的一个端点最近并且在区域内的点的方法,来确定线段落在窗口内的端点。

7、问答题局部光照模型和全局光照模型的不同之处是什么?答案:局部光照模型主要是考虑光源发出的光对物体的直接影响。

另外,全局光照模型除了处理光源发出的光之外,还考虑其他辅助光的影响,如光线穿过透明或半透明物体,以及光线从一个物体表面反射到另一个表面等。

8、判断题彩色阴极射线管主要是由红绿蓝三个彩色电子束的亮度不同,进而组合形成各种色彩的。

答案:错9、问答题什么叫做走样?什么叫做反走样?反走样技术包括那些?答案:走样指的是用离散量表示连续量引起的失真。

为了提高图形的显示质量。

需要减少或消除因走样带来的阶梯形或闪烁效果,用于减少或消除这种效果的方法称为反走样。

其方法是①前滤波,以较高的分辨率显示对象;②后滤波,即加权区域取样,在高于显示分辨率的较高分辨率下用点取样方法计算,然后对几个像素的属性进行平均得到较低分辨率下的像素属性。

基本光栅图形学算法

基本光栅图形学算法
1 2 3 4 5 6 7 8
SEI
18
高级语言程序设计 计算机图形学 2010秋季 程序设计基础 • 2007春季
C++ 填充
步骤 求交
逐点比较法 Y-X扫描线 X
扫描线算法
求扫描线与多边形各边交点 排序 按 x 递增顺序对交点排序 交点匹配 1-2,3-4,5-6等 填充 填充每对交点间在多边形区域 内部的象素。 内部的象素。
17
逐点比较法 Y-X扫描线 X 扫描线种子
SEI
高级语言程序设计 计算机图形学 2010秋季 程序设计基础 • 2007春季
C++ 填充
扫描线算法
原理
逐点比较法 Y-X扫描线 X
对任一条扫描线, 对任一条扫描线,确 定该扫描线与多边形 边的交点位置,自左 边的交点位置, 向右存储, 向右存储,并对每对 内部交点间的帧缓存 填写指定颜色
SEI
15
高级语言程序设计 计算机图形学 2010秋季 程序设计基础 • 2007春季
C++ 填充
3.3 多边形区域填充
区域填充是光栅系统的一大亮点,优于向量 区域填充是光栅系统的一大亮点 优于向量 系统 区域填充利于物体的真实感建模
SEI
16
高级语言程序设计 计算机图形学 2010秋季 程序设计基础 • 2007春季
SEI
21
高级语言程序设计 计算机图形学 2010秋季 程序设计基础 • 2007春季
C++ 填充
扫描线算法
每条扫描线具有一个链表, 每条扫描线具有一个链表,包含与其相交边的信息
struct E { double ymax; double x_Intersection; double dx; E * pointer ; }

计算机图形学第5章

计算机图形学第5章

改进的Bresenham算法步骤:
1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。
2.计算初始值▣x、▣y、e=-▣x、x=x0、y=y0。
3.绘制点(x,y)。
4.e更新为e+2▣y,判断e的符号。若e>0,则(x,y)
更新为(x+1,y+1),同时将e更新为e-2▣x;否则
(x,y)更新为(x+1,y)。
2.计算初始值▣x、▣y、d=0、x=x0、y=y0。
3.绘制点(x,y)。
4.d更新为d+k,判断d的符号。若d>0.5,则(x,y)更
新为(x+1,y+1),同时将d更新为d-1;否则(x,y)更
新为(x+1,y)。
5.当直线没有画完时,重复步骤3和4。否则结束。
改进1:令e=d-0.5 (避免判断小数)
max(|▣x|,|▣y|)=|▣y|,此时|k|≥1:
(5-3)
1 1 xi 1 xi x xi x xi y k 1 yi 1 yi y yi y yi 1 y
(5-4)
K≥1
(round(x i+1/k ),yi+1 ) (xi,yi)
图5-5 Brensemham算法生成直线的原理
误差项的递推 d<0:取右上方象素
(xi+2,yi+1.5) (xi+1,yi+0.5) (xi,yi) d<0
d F ( xi 2, yi 1.5) yi 1.5 k ( xi 2) b
yi 1.5 k ( xi 1) b k d 1 k

计算机图形学基础教程——第2章1

计算机图形学基础教程——第2章1
目标:进一步将一个加法改为一个整数加法。
新思路-> DDA算法采用点斜式,可否采用其他的直 线表示方式?
清华大学计算机科学与技术系
计算机图形学基础
•基本思想
当前象素点为(xp, yp) 。下一个象素点为P1 或P2 。 设M=(xp+1, yp+0.5),为p1与p2
之中点,Q为理想直线与x=xp+1
x=x+1,e=e+k;
if (e0) { y++, e=e-1;} } } 清华大学计算机科学与技术系 计算机图形学基础
• 最终,Bresenham算法也是每个象素,需一个整数算法, 其优点是可以用于其他二次曲线。
至此,直线光栅化是否终结?
清华大学计算机科学与技术系
计算机图形学基础
新方法:
BRDC: binary representation of displacement code for line
2.1 直线段的扫描转换算法
• 直线的扫描转换: 确定最佳逼近于该直线的一组 象素,并且按扫描线顺序,对这些象素进行写 操作。
• 三个常用算法:
数值微分法(DDA)
3 2 1 Line: P0(0, 0)-- P1(5, 2)
中点画线法
Bresenham算法。
0
1
2
3
4
5
清华大学计算机科学与技术系
2.1.3 Bresenham算法
• 基本思想
– DDA算法采用点斜式,中点法采用隐式表示。 – 中点法可以有整数算法。
– 其他表示可以推出整数算法吗?
清华大学计算机科学与技术系
计算机图形学基础
– 过各行各列象素中心构造一组虚拟网格线。按直线从

光栅图形学(一):直线段的扫描转换算法

光栅图形学(一):直线段的扫描转换算法

光栅图形学(⼀):直线段的扫描转换算法前⾔ 在数学上,理想的直线是没有宽度的,它是由⽆数个点构成的集合。

对直线进⾏光栅化时,只能在显⽰器说给定的有限个像素组成的矩阵中,确定最佳逼近于该直线的⼀组像素,并且按扫描线顺序。

本节介绍绘制线宽为⼀个像素的直线的三个常⽤算法:数值微分,中点画线和Bresenham算法。

数值微分法 已知过端点 P0(x0, y0),P1(x1, y1) 的直线段 L(P0, P1);直线斜率为 k = (y1 - y0) / (x1 - x0)。

于是 y i+1 = kx i+1 + b。

于是,x每增加1,y就增加k。

画点的时候还需要判断int(y+0.5)向下取整。

1// 数值微分法,伪代码2void DDAline(int x0, int y0, int x1, int y1) {3int dx, dy, x=x0, y=y0;4double k;5 dx = x0 - x1; dy = y0 - y1;6 k = dy / dx;7 draw(x, y)8while (x <= x1) {9 x += 1;10 y += k;11 draw(x, int(y+0.5));12 }13 } 效果图如下(0,1)(5, 4):中点画线法 假设线段 F(M) = ax + by + c = 0。

(a=y0-y1; b=x1-x0; c=x0y1-x1y0)。

中点画线法的思想就是对于点(x p,y p)的下⼀个点 M(x p+1,y+0.5),拿这个中点和实际点⽐较,如果实际点在中点上⽅(F(M) <0),则取(xp+1,yp+1)为下⼀个点。

如果实际点在中点下⽅(即中点代⼊直线⽅程的值⼤于0,F(M) >= 0),则取(xp+1, yp)。

为了加速计算,我们通常采⽤增量的⽅法。

假设从(x p,y p)开始画线,d的初值d0 = F(x0+1, y0+0.5)= F(x0,y0)+a+0.5。

图形学实验--直线扫描转换算法实现(DDA)实验一算法

图形学实验--直线扫描转换算法实现(DDA)实验一算法

图形学实验--直线扫描转换算法实现(DDA)实验一算法//采用了DDA算法//画直线时通过鼠标点击两点确定起点和终点#include#include#include#include"windows.h"#include"gl/gl.h"#include"gl/glu.h"#include"gl/glaux.h"#include"stdlib.h"struct GLintPoint{GLint x;GLint y;};GLintPoint p[2];bool sig=false;int scrw=640,scrh=480;void drawline(){int dx=p[1].x-p[0].x,dy=p[1].y-p[0].y;int steps, k;float xIncrement, yIncrement, x = p[0].x, y = p[0].y; // 初始化if (fabs(dx) > fabs(dy)){steps = fabs(dx);} // 判断定长方向else{steps = fabs(dy);}xIncrement = float(dx) / float(steps); // 计算两个方向的增量yIncrement = float(dy) / float(steps);glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0f, 0.0f, 0.0f);glBegin(GL_LINES);glVertex2i(x,y);// 绘制起点for (k = 0; k < steps; k++){x += xIncrement;y += yIncrement;glVertex2i(x,y);}glEnd();glFlush();}void myDisplay(){glClear(GL_COLOR_BUFFER_BIT);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glColor3f(0.0,0.0,1.0);if(sig)drawline();glutSwapBuffers();}void myMouse(int button,int state,int x,int y){if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN){ p[0].x=x;p[0].y=scrh-y;sig=true;}glutPostRedisplay();}//void myPassiveMotion(int x,int y)void myMotion(int x,int y){p[1].x=x;p[1].y=scrh-y;glutPostRedisplay();}int main(int argc,char **argv){glutInit(&argc,argv);glutInitWindowSize(scrw,scrh); glutInitWindowPosition(0,0);glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE); glutCreateWindow("Yangyu!");glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0,scrw,0,scrh);glMatrixMode(GL_MODELVIEW);glClearColor(0.0f,0.0f,0.0f,0.0f); glViewport(0,0,scrw,scrh); glutMouseFunc(myMouse); glutDisplayFunc(myDisplay); glutMotionFunc(myMotion); glutMainLoop();return 0;}。

计算机图形学_基本算法

计算机图形学_基本算法
在不考虑线宽时一维图形的扫描转换主要是确定一维的像素序列二维图形的扫描转换是确定平面区域所对应的像素集称为区域填充称为区域填充一般微机系统板上都配有图形显示缓冲区为了快速及时地控制图形的输出为了快速及时地控制图形的输出系统在基本内存中开辟了从a0000hcffffha0000hcffffh的的256256kk字节字节甚至到甚至到fffffhfffffh的的512512kk字节字节的存储空间在显示卡上的空间更大可达数十兆空间
应不同的设备。
12
返回
2
Ø曲线也可由直线段逼近生成 Ø解决的问题:给定直线两端点P0(x0,y0)
和P1(x1,y1),画出该直线。 主要步骤可以表示如下:
13
初值
偏差判别
移动绘图 偏差计算
终点 判断
N
Y 结束
图2-2 一般线段绘制过程的主要步骤示意图
• 偏差判别:根据当前绘图点位置与理想位置的偏差情况,确定
在不考虑线宽时,一维图形的扫描转 换主要是确定一维的像素序列,二维图 形的扫描转换是确定平面区域所对应的 像素集(称为区域填充)。
5
Ø 一般微机系统板上都配有图形显示缓冲区,
为了快速、及时地控制图形的输出,系统在基
本内存中开辟了从
A0000H ~ CFFFFH的256K字节
甚至到FFFFFH的512K字节
29
返回
因递推公式: Xi+1=Xi+1 yi+1 = kxi+1+b= k1xi+b+k∆x= yi+k∆x
所以:当 ∆x =1; yi+1 = yi+k。 即当x每递增1,y递增k(即直线斜率)
y
yi+1

计算机图形学基础试题

计算机图形学基础试题

名词解释:1图形的扫描转换:确定最佳逼近图形的象素集合,并用指定的颜色和灰度设置象素的过程称为图形的扫描转换或光栅化。

2区域填充:区域填充指先将区域的一点赋予指定的颜色,然后将该颜色扩展到整个区域的过程。

3图形:通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成, 强调场景的几何表示,由场景的几何模型和景物的物理属性共同组成。

4直线的扫描转换:当我们对直线进行光栅化时,需要在显示器有限个象素中,确定最佳逼近该直线的一组象素,并且按扫描线顺序,对这些象素进行写操作,这个过程称为用显示器绘制直线或直线的扫描转换。

5剪裁:确定图形中哪些部分落在显示区之内,哪些落在显示区之外,以便只显示落在显示区内的那部分图形的选择过程称为裁剪。

6计算机图形学:计算机图形学是研究怎样用数字计算机生成、处理和显示图形的一门学科。

7种子填充算法:根据已知多边形区域内部的一个象素点来找到区域内其它象素点,从而对多边形区域内部进行填充。

8走样:在光栅显示设备上,由于象素点和象素点之间是离散的,因此用象素点阵组合出的图形,与真实景物之间必然存在一定的误差。

比如,直线或曲线往往呈现锯齿状,细小物体在图上显示不出来等。

这种现象就是图形的走样9CRT:一种真空器件,它利用电磁场产生高速的、经过聚焦的电子束,偏转到屏幕的不同位置轰击屏幕表面的荧光材料而产生可见图形。

10区域:是指已经表示成点阵形式的填充图形,它是像素集合。

11.图形和图象主要不同之处:在计算机图形学中,前者是指矢量表示的图,后者是指用点阵表示的图。

12.随机扫描和光栅扫描主要不同之处:前者是电子束扫描路径随图形不同而不同,后者是电子束扫描路径固定不变。

填空:1.刷新式CRT图形显示器按扫描方式分为随机扫描和光栅扫描两种。

2.屏幕上最小的发光单元叫做象素点,它的多少叫做分辨率,颜色深度指的是位平面的个数。

3.汉字字库一般可分为电阵字库和矢量字库两种。

4.在线段AB的区域编码裁剪算法中,如A、B两点的码均为零,则该线段位于窗口内;如A、B两点的码按位与不为零,则该线段在窗口外。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档