- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章 二维线画图元及属性3.1 直线的扫描转换及算法3.2 圆和椭圆的扫描转换算法3.3 其他输出图元的生成3.4 输出图元的属性3.5 字符的生成3.1 直线的扫描转换及算法扫描转换:从图形定义的物空间到进行显示处理的图像空间的转换线画图元的扫描转换:计算出落在线段上或充分靠近它的一串像素,并以此像素集近似替代连续直线段在屏幕上显示的过程。 像素:中心为网格点的圆点,距离均匀,相互不重叠由像素表示的直线段为均匀填充的实心原点3.1 直线的扫描转换及算法 一、点的生成 点是图形中最基本的图素,直线、曲线以及其它的图元都是点的集合。在几何学中,一个点既没有大小,也没有维数,点只是表示坐标系统中的一个位置。在计算机图形学中,点是用数值坐标表示的。在直角坐标系中点由(x, y)两个数值组成的坐标表示,在三维坐标系中点由(x, y, z)三个数值组成的坐标表示。 在输出设备上输出一个点,首先需要计算出该点的坐标位置(最逼近该点的像素位置),其次需要把应用程序中的坐标信息转换成所用输出设备的相应指令。3.1 直线的扫描转换及算法 二、 直线的扫描转换在数学上,理想的点和直线都是没有宽度的。但是,由于每个像素对应于图形设备上的一个矩形区域,当我们在光栅图形设备上显示一个点时,实际上它是有用一个发光的矩形区域来表示的;当在光栅图形设备上显示一条直线时,我们只能在显示器所给定的有限个像素组成的矩阵中,按扫描线顺序,依次确定最佳逼近于该直线的一组像素,并且对这些像素进行写操作。这个过程称为直线的扫描转换。3.1 直线的扫描转换及算法 二、 直线的扫描转换对于水平线、垂直线和45o斜线,选择哪些像素是显而易见的,但是对于其它的直线,确定用哪些像素来表示它就不那麽简单了。本节我们介绍用于直线扫描转换的常用算法:数值微分法Bresenham画线算法中点画线法3.1 直线的扫描转换及算法 Geometric Graphics G={Pi | Pi--nearest pixel } 基本图形的生成算法任务之一就是找出所有的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方向的间隔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的增量方程: 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 3.开始端点在右端点,中止端点在左端点,则 ? x =-1 Yi+1 = Yi - k ? y=-1Xi+1 = Xi -1/ k 3.1.1 数值微分法算法过程:Dx=X1-X0 ; Dy=Y1-Y0此两参数的绝对值哪一个大,哪一个就作为步长参数(n),此参数将作为沿直线所画出点的数目(1)当|Dx|= |Dy|(即|k|=1)时若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/k3.1.1 数值微分法例:画直线段P0(0,0)--P1(5,2) Dx=x2-x1=5, Dy=y2-y1=2? DxDy ?x =1?y =2/5=0.4所以x方向上计长,走步数为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
原创力文档


文档评论(0)