计算机图形学ppt课件_第1页
计算机图形学ppt课件_第2页
计算机图形学ppt课件_第3页
计算机图形学ppt课件_第4页
计算机图形学ppt课件_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章光栅图形学,2.1直线段的扫描变换算法2.2圆弧的扫描变换算法2.3多边形的扫描变换和区域填充2.4文字2.5切取2.6抗锯齿2.7隐藏,1, 2.1直线段扫描变换算法,数值微分法(DDA算法)单点划线法Bresenham线算法,2,数值微分法(DigitalDifferentialAnalyzer ),基本思想是直线的起点、终点分别为(x0,y0 )、(x1,y1 ),整数已知端点P0(x0,y0 )、P1(x1,y1 )的直线段L(P0,P1 )的直线的斜率以y=kx b计算对应的y坐标。 3、数值微分(DDA )法将步长设为x,如果有xi 1=xi x,则yi 1=kxi 1 b=kxi kx b=yi kx网格点的单位为1,因此每个x方向的增量x=1时有yi 1=yi k。 也就是说,x逐渐增加1,y逐渐增加k (直线的斜率)。 round ()函数处理后显示的网格点(x,round(y ) )坐标。 xi 1=xi 1yi 1=yi k,4,视频总线(intx 0,inty0,intx1,inty1,intcolor)intx; 浮点dx,dy,y,k; dx=x1-x0; dy=y1-y0; k=dy/dx; y=y0; for(x=x0; xx1; x )drawpixel(x,int(y 0.5 ),color; y=y k; 数值微分(DDA )法,5,例如直线段p0(0,0 )- p1(5,2 ),xy 0.5int(y 0.5),000.50,10.40.50,20.80.51,31.20.51,41.60.52,52.0.52,优点:在同一坐标上连续滞留两次缺点:在该算法中,y、k必须是浮点,在所有步骤中y必须被舍入以对硬件实现有利。 算法的特征:注意:网格点表示像素,6,递增算法:在迭代算法中,如果每一步的x,y值是通过将上一步的值与递增相加而得到的,则称为递增算法。 DDA算法是一种增量算法。 缺点注意上面分析的算法仅适用于k1。 在此情况下,x逐个增加,y逐个增加。 k-1的情况下,必须调换x、y的地位,y逐渐增加1,x增加1/k。 在该算法中,y、k必须是浮点(float )。因为每个步骤将是对y进行舍入以及有浮点舍入运算,所以硬件实现是不方便的。 假设效率低,数值微分(DDA )法,7,原理:直线斜率0为P2。 m取q的上-P1接近直线的-P1m和q重叠,p1、P2中的任意一个。 算法原理,如何判断m点在q点之上还是q点之下? 9、线段两端点(x0,y0)、(x1,y1)的直线方程式,在F(x,y)=ax by c=0中,a=y0-y1、b=x1-x0、c=x0y1-x1y0、m、中点线法、8756; 可以看出,为了判断m点是高于q点还是低于q点,只需将m代入F(x,y )中,调查其符号即可。 10、结构判别式: d=F(M)=F(xP1,yp 0.5)=a(xp 1) b(yp 0.5) c为d0,m为直线(q点)上右p 1; d=0时,可以选择P1或P2,采用约定采取P1的增量算法吗? 另外,在中点线法、11、d0、中点m处于直线上时,取正右侧的像素P1(Xp 1,Yp )的下一个像素的判别式为d1=F(Xp 1) 1, 在Yp 0.5)=a(Xp 2) b(Yp 0.5) c=d ad的增量为a若d0、中点m处于直线之下的情况下,右上方的像素P2(Xp 1 Yp 1)的下一个像素的判别式中,将d2=F(Xp 1) 1、(Yp 1) 0.5)=a(Xp 2) b(Yp 1.5) c=d a bd的增量设为ab, 若考虑下一个像素的判定,由于根据(x0,y0),仅用d的符号判定d的初始值d0=f (x0-1y0.5)=a (x0-1) b (y0.5)-c=f (x 0,y0) a 0.5b=a 0.5b,因此仅包含整数运算,因此可以用2d代替d从小数点脱离,从而提高效率优点:仅通过整数运算就能够在不包含乘法除法的硬件中实现的虚线法,因为(X0,Y0)在直线上,所以F(X0,y0)=0,13,voidMidpointLine(intx0,inty0,intx1,inty1,intcolor)inta,b,DNA a=y0-y1; b=x1-x0; d=2*a b; d1=2*a; d2=2*(a b) x=x0; y=y0; drawpixel(x,y,color) while(x0)thene=e-2x,21,演算法步骤:1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2 .计算初始值x、y、e=-x、x=x0、y=y0。 3 .绘制点(x,y )。 4 .将e更新为e 2y,并且确定e的符号。 如果为e0,则(x,y )更新为(x 1,y 1),e更新为e-2x,否则(x,y )更新为(x 1,y )。 5 .如果未绘制直线,请重复步骤3和4。 否则就结束了。、Bresenham算法、22、程序由BresenhamLine(intx0、inty0、intx1、inty1、intcolor)intx、y、dx、dy、e; dx=x1-x0; dy=y1-y0; e=-dx; x=x0; y=y0; for(i=0; i=0)y; e=e-2*dx; 优点整数运算、速度高精度的乘法2运算可通过移位实现,适合硬件实现,23、倾斜度不同时:以上讨论的是0k1时,即0yx时的0xy时,需要更换x和y的位置。 如果方向不同:如果y0或x0,则用y=y-1代替算法中的y=y 1,用x=x-1代替x=x-1。 思维讨论: 24,一些线性算法的比较,DDA算法是直观的和容易实现的,但是x、y和k必须由浮点数表示,每个步骤需要将x和y舍入整理以对硬件实现不利。 中间点算法能够被整数运算所替代,以便于硬件的实现。 Bresenham算法不计算斜率,不使用浮点数,只进行整数的加减运算和乘法2运算,乘法2运算可以通过移位操作实现,因此Bresenham算法是最快的。 25、实验一直线生成,在VisualC 6.0环境中设计了MFC单文本程序,构建了可利用消息处理函数执行图形算法程序的平台。 实现直线段的3种生成算法: DDA算法(考虑k为1以上时)、中点法和Bresenham算法(原算法和改良算法)。 26、第二章光栅图形学、2.1直线段扫描转换算法2.2圆弧扫描转换算法2.3多边形扫描转换和区域填充2.4字符2.5切出2.6抗锯齿2.7隐藏、27、2.2圆弧扫描转换算法, 基于直接离散生成算法的中点圆法Bresenham像素圆算法椭圆的中点画法,28,圆弧扫描算法,下文中,将中心点设置为原点并且半径r设置为整数的圆作为示例,研究了圆的生成算法。 圆的方程假设x2 y2=R2圆的八对称性可以用四个对称轴x=0,y=0,x=y,x=-y将圆等分为八份。 只要画出第一象限内的1/8圆弧I,就可以基于对称性画出全圆,将其称为八分法圆算法。 29、P(y,x)P(y,-x )、P(x,-y )、P(-x,-y )、P(-y,-x )、P(-y,x )、P(-x,y )。 假设第一象限内任意点为P(x,y ),则另外7点:30,圆弧扫描算法,2种直接离散生成方法离散点开方运算离散角三角函数运算缺点:计算量较大地描绘的像素位置间的间距不均匀、不均匀、31,圆弧扫描算法,SimpleCircle(intr,intr ) for(x=0; x=r; x )y=Round(sqrt(r*r-x*x ); circlepoints(x,y,color ) 参数circle (intr,intcolor)intx,y; for (浮点=0; t=/2; t=0.05)x=Round(r*cos(t ) ); y=Round(r*sin(t ) ); 在第二个八分割圆P(Xp,Yp)P是当前点亮的像素的情况下,接下来要点亮的像素是P1(Xp 1,Yp )或P2(Xp 1,Yp-1 )。 另外,在中点描绘圆法、33、中点描绘圆法、F(X,Y)=X2 Y2-R2=0中点M=(XP1,yp-0.5)f(m)0时,m接近圆外,P2接近圆弧,P2、34、中点描绘圆法、d=0时,将p 1与下一个像素进一步

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论