资源描述:
《《维线画图元及属性》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第3章二维线画图元及属性在图形系统的输出设备上生成的画面,都是由各种基本几何元素——图形输出基元(简称为输出图元)构成的。画面上最简单的输出图元是点和直线,其他还有多边形、曲线图形以及字符串等。本章介绍一些常用直线段、圆弧的扫描转换算法。第3章二维线画图元及属性3.1直线的扫描转换及算法3.2圆和椭圆的扫描转换算法3.3其他输出图元的生成3.4输出图元的属性3.5字符的生成3.1直线的扫描转换及算法扫描转换:从图形定义的物空间到进行显示处理的图像空间的转换线画图元的扫描转换:计算出落在线段上或充分靠近它的一串像素,并以此像素集近似替代连续直线段在屏幕上显示的过程。由像素表示的直线段为均匀填充的
2、实心原点像素:中心为网格点的圆点,距离均匀,相互不重叠3.1直线的扫描转换及算法一、点的生成点是图形中最基本的图素,直线、曲线以及其它的图元都是点的集合。在几何学中,一个点既没有大小,也没有维数,点只是表示坐标系统中的一个位置。在计算机图形学中,点是用数值坐标表示的。在直角坐标系中点由(x,y)两个数值组成的坐标表示,在三维坐标系中点由(x,y,z)三个数值组成的坐标表示。在输出设备上输出一个点,首先需要计算出该点的坐标位置(最逼近该点的像素位置),其次需要把应用程序中的坐标信息转换成所用输出设备的相应指令。3.1直线的扫描转换及算法二、直线的扫描转换在数学上,理想的点和直线都是没有宽度的。但
3、是,由于每个像素对应于图形设备上的一个矩形区域,当我们在光栅图形设备上显示一个点时,实际上它是有用一个发光的矩形区域来表示的;当在光栅图形设备上显示一条直线时,我们只能在显示器所给定的有限个像素组成的矩阵中,按扫描线顺序,依次确定最佳逼近于该直线的一组像素,并且对这些像素进行写操作。这个过程称为直线的扫描转换。3.1直线的扫描转换及算法二、直线的扫描转换对于水平线、垂直线和45º斜线,选择哪些像素是显而易见的,但是对于其它的直线,确定用哪些像素来表示它就不那麽简单了。本节我们介绍用于直线扫描转换的常用算法:数值微分法Bresenham画线算法中点画线法3.1直线的扫描转换及算法象素线圆Geom
4、etricGraphicsG={Pi
5、Pi--nearestpixel}基本图形的生成算法任务之一就是找出所有的Pi。3.1直线的扫描转换及算法在介绍画线算法之前,我们先讨论画直线的基本要求:直线必须有精确的起点和终点,外观要直,线宽应当均匀一致、且与直线的长度和方向无关,算法速度要快。3.1直线的扫描转换及算法直线方程:y=kx+bk是直线的斜率,b是y方向的截距,若直线的两端点为(x0,y0)及(x1,y1),则k=(y1-y0)/(x1-x0)b=y1-kx1对于一直线,在x方向取间隔dx,则可计算y方向的间隔dydy=k×dx该方法涉及到浮点数的乘除法、加减法以及取整运算,因此,效率非
6、常低3.1.1数值微分法数值微分法即DDA(DigitalDifferentialAnalyzer)基本思想:先对一个方向的坐标取单位步长的变化,然后计算另一方向坐标相应的变化值。假定直线的起点、终点分别为:(X0,Y0),(X1,Y1),且都为整数。则直线方程和斜率k为:Y=k*X+Bk=(Y1-Y0)/(X1-X0)3.1.1数值微分法1.
7、k
8、<=1,则应取x坐标的增量为x=1,可得如下Y的增量方程:Yi+1=kXi+1+B=k(Xi+x)+B=kXi+B+kx=Yi+kx=Yi+ki取自1开始的整数,顺次加1,直到最后的端点,y取最接近的整数2.
9、k
10、>1,则应取y坐标的增量为
11、y=1,可得如下X的增量方程:Xi+1=Xi+1/k3.开始端点在右端点,中止端点在左端点,则x=-1Yi+1=Yi-ky=-1Xi+1=Xi-1/k3.1.1数值微分法算法过程:Dx=X1-X0;Dy=Y1-Y0此两参数的绝对值哪一个大,哪一个就作为步长参数(n),此参数将作为沿直线所画出点的数目(1)当
12、Dx
13、>=
14、Dy
15、(即
16、k
17、<=1)时若X0X1,则x=-1,y=-k(2)当
18、Dx
19、<
20、Dy
21、(即
22、k
23、>1)时若X0X1,则y=-1,x=-1/k3.1.1数值微分法例:画直线段P0(0,0)--
24、P1(5,2)Dx=x2-x1=5,Dy=y2-y1=2Dx>Dyx=1y=2/5=0.4所以x方向上计长,走步数为5取初值x0=0.5,y0=0.5(保证四舍五入)C=1x1=x0+1=1.5,y1=y0+0.4=0.9取点(1,0)C=2x2=x1+1=2.5,y2=y1+0.4=1.3取点(2,1)C=3x3=x2+1=3.5,y3=y2+0.4=1.7取点(3,1)C=4x4=x3+