ch03直线、圆、椭圆的生成

ch03直线、圆、椭圆的生成

ID:45035396

大小:1.05 MB

页数:57页

时间:2019-11-08

ch03直线、圆、椭圆的生成_第1页
ch03直线、圆、椭圆的生成_第2页
ch03直线、圆、椭圆的生成_第3页
ch03直线、圆、椭圆的生成_第4页
ch03直线、圆、椭圆的生成_第5页
资源描述:

《ch03直线、圆、椭圆的生成》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1、扫描转换直线段DDA算法中点画线法Bresenham画线算法2、圆弧、椭圆弧扫描转换中点画圆算法Bresenham画圆算法中点画椭圆算法本章内容扫描转换原理第三章直线、圆、椭圆生成算法1、输出图元(OutputPrimitive)图形生成的基本构造单元称为输出图元。输出图元包括字符串和几何成分,如:点、直线,二次曲线、填充区域(多边形,圆)及由彩色阵列定义的形状。2、扫描转换图形的两种表示方法点阵表示矢量表示反映了图形的外表反映了图形的内在联系对光栅扫描器而言,矢量表示不能直接用于显示将矢量表示的图形对象的转换为点阵表示称为扫描转换任何图形的

2、光栅化,必须显示在一个窗口内,否则不予显示。即确定一个图形的哪些部分在窗口内,哪些在窗口外,即裁剪。第三章直线、圆、椭圆生成算法图形的扫描转换(光栅化):确定一个像素集合,用于显示一个图形的过程。步骤如下:1、确定有关像素2、用图形的颜色或其它属性,对像素进行写操作。对一维图形,不考虑线宽,则用一个像素宽的直线来显示图形。二维图形的光栅化,即区域的填充:确定像素集,填色或图案。图形显示前需要:扫描转换+裁剪裁剪扫描转换:最常用,节约计算时间。扫描转换裁剪:算法简单;二维裁剪扫描转换显示图元第三章直线、圆、椭圆生成算法屏幕坐标定义由扫描转换原理

3、知:数字设备通过绘制两端点间的离散点来显示直线段,线段上离散坐标位置是从线段方程中计算出来的,其所表示的对象用精确的坐标描述,其每一位置是数学上的无限小的点;而在光栅扫描显示器中的点用一个像素表示。其为一有限的屏幕区域,屏幕的位置用整数值,所以屏幕上绘制的点仅是实际坐标中点位置的近似。要显示坐标系中指定几何形状就需要调整数学输入点到有限像素区域的映射数学输入点到有限像素区域的映射方法有两种1、对象与像素中心对齐2、物体边界与像素边界对齐见下图第三章直线、圆、椭圆生成算法0123401234点位置像素位置0123401234点位置像素位置55像素中

4、心对准编址方式像素边界对准编址方式两种屏幕坐标的编址方法注:在后面学习中使用像素中心对准编址方式第三章直线、圆、椭圆生成算法直线段的扫描转换算法直线的扫描转换:确定最佳逼近于该直线的一组象素,并且按扫描线顺序,对这些象素进行写操作。三个常用算法:数值微分法(DDA);中点画线法;Bresenham算法。假定直线的起点、终点分别为:(x0,y0),(x1,y1),且都为整数。记直线的斜率为k。数值微分(DDA)法虚线交叉点为像素中心点基本思想已知过端点P0(x0,y0),P1(x1,y1)的直线段L:y=kx+b直线斜率为这种方法直观,但效率太低,

5、因为每一步需要一次浮点乘法和一次舍入运算。数值微分(DDA)法即:当x每递增1,y递增k(即直线斜率);先考虑k≤1的情形。当k1时,必须把x,y地位互换数值微分(DDA)法在这种情况下,x每增加1,y最多增加1。在这种情况下,y每增加1,x最多增加1。即:当y每递增1,x递增1/k(即直线斜率倒数);数值微分(DDA)法增量算法:在一个迭代算法中,如果每一步的x、y值是用前一步的值加上一个增量来获得,则称为增量算法。DDA算法就是一个增量算法。上面是从左端点开始计算的,若以右端点作为起始点当k≤1时:取x=-1,yi+1=yi-

6、k当k≥1时:取y=-1,xi+1=xi-1/k下面为一般DDA算法的一段伪代码数值微分(DDA)法if(abs(x1-x0)>=abs(y1-y0)thenLength=abs(x1-x0)elseLength=abs(y1-y0)endif%选取x和y大者作为步长x=(x1-x0)/Lengthy=(y1-y0)/Lengthx=x0+0.5y=y0+0.5%开始主循环i=1while(i<=Length)Setpixel(int(x),int(y))x=x+xy=y+yi=i+1endwhileDDA算法的伪代码#incl

7、ude#includeinlineintround(constfloata){returnint(a+0.5);}voidlineDDA(intx0,inty0,intxEnd,intyEnd){intdx=xEnd-x0,dy=yEnd-y0,steps,k;floatxIncrement,yIncrement,x=x0,y=y0;if(fabs(dx)>fabs(dy))steps=fabs(dx);elsesteps=fabs(dy);xIncrement=float(dx)/float(steps);y

8、Increment=float(dy)/float(steps);setPixel(round(x),round(y));for(k=0

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。