计算机图形学03-二维图形生成.pptx

  1. 1、本文档共65页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3讲:二维图形生成§3.1 直线生成算法图元 primitive任何复杂的图形通常被看作是由一些基本图形元素(图元)构成的。基本二维图元包括点、直线、圆弧、多边形、字体符号和位图等,它们的显示问题是任何复杂二维图形及图像显示技术的基础。三维图形的显示最终也是通过投影转化成二维图形的显示。图元通常是指不可再分的独立的图形实体。基本图元显示问题就是根据基本图元的描述信息来生成像素组合。图元的属性图元的描述除了含有坐标信息外,还描述了图元的一些属性信息,比如线宽、线型、颜色、填充图案等第3章:二维图形生成§3.1 直线生成算法曲线和各种复杂的图形均是离散成许多直线段来绘制,因而直线是二维图形生成技术的基础。理论上认为,根据直线的数学方程算出直线上的一个个点即可,但这样做运算效率不高。常见算法: 1 数值微分法 2 逐点比较法 3 中点画线法 4 Bresenham算法1 数值微分法数值微分法(DDA法)是根据直线的微分方程来画直线的,它是最简单的一种画线方法。设直线的起点坐标是 Ps(xs , ys),终点坐标为Pe ( xe , ye ),令Δx = xe - xs ,Δy = ye - ys ,则要绘制的直线的微分方程为对上面的式子用中的微商用差商来代替,即得令 Δm=max(|Δx|, |Δy|), 取时间步长 t2 - t1 = 1/Δm,则对每一步,可得上述微分方程数值解的递推公式为 xi+1=xi+Δx/Δm,yi+1=yi+Δy/Δm2b1b2a1a4a3a4b3bΔy/ Δm11Δx/ Δm1 数值微分法按照直线的斜率k=Δx/Δy可分两种情况来分析:|k|>1时,y方向为计长方向,这时Δm=|Δy|,增加或减少的步长Δy/Δm始终为1个单位。x方向的变化步长为Δx/Δm。|k|≤1时,x方向为计长方向。这时Δm=|Δx|,x方向的变化量Δx/Δm为1个单位,y方向的变化步长则为Δy/Δm。DDA算法程序DDA法每产生一个像素点只需要加法运算,但如果绘制的线很长时会产生累积误差,尽管这种误差通常不会产生很大的影响。 void LineDDA(int x1, int y1, int x2, int y2, int color){ int dm=0; if (abs(x2-x1)>= abs(y2-y1)//abs是求绝对值的函数 dm=abs(x2-x1); //x为计长方向 else dm=abs(y2-y1); //y为计长方向 float dx=(float)(x2-x1)/dm; //当x为计长方向时,dx的值为1 float dy=(float)(y2-y1)/dm; //当y为计长方向时,dy的值为1 float x=x1+0.5; float y=y1+0.5; for (int i=0; i< dm; i++) { setpixel( (int)x, (int)y, color); x+=dx; y+=dy; }}P2QMP (xp,yp)P14 中值画线法1. 构造判别式假定直线斜率0<k<1,且已确定当前处理过的像素点P(xp,yp),则下一个与直线最接近的像素只能是P1或P2。设M为P1与P2的中点,Q为交点,见图。现确定下一个要画的像素的位置。如果M在Q下方,则P2离直线近,取P2;如果M在Q上方,则P1离直线近,取P1。M与Q重合,P1、P2任取一点。问题转换为如何判断M与Q点的关系。中值画线算法假设直线方程为 F(x,y)=ax+by+c=0其中a=y0-y1, b=x0-x1, c=x0?y1-x1?y0.则由数学知识可知有下面的关系:F(x, y)=0,点在直线上,F(x, y)>0,点在直线上方,F(x, y)<0,点在直线下方。所以,欲判断M点在Q点上方还是在Q点下方,只需要把中点M代入F(x, y),并检查它的符号。构造判别式:d = F(M) = F(xp+1, yp+0.5) = a(xp+1) + b(yp+0.5) + c当d < 0,M在直线(Q)下方,取右上方P2;当d ≥ 0,M在直线(Q)上方,取右方P1。中值画线算法2. 判别式的增量算法当d ≥ 0, 此时取P1,新的判别式为 (将xp+1代入xp) d1=F(xp+2, yp+0.5) =a(xp+2)+b(yp+0.5)+c = a(xp+1)+b(yp+0.5)+c+a =d+a增量为a;若d < 0,此时取P2,新的判别式为(将yp+1代入yp) d2=F(xp+2, yp+1.5) =a(xp+2)+ b(yp+1.5)+c =a(xp+1)+b(yp+0.5)+c+a+b =d+a+b增量为a+b。 中值画线算法3. 判别式的初始值画线从(x0, y0)开始,d的初值 d0

文档评论(0)

此项为空 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档