《精》计算机图形学第二讲 直线和圆的生成.ppt

《精》计算机图形学第二讲 直线和圆的生成.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
直线DDA算法描述 设(x1,y1)和(x2,y2)分别为所求直线的起点和终点坐标,由直线的微分方程得 可通过计算由x方向的增量△x引起y的改变来生成直线: 也可通过计算由y方向的增量△y引起x的改变来生成直线: 直线DDA算法思想   选定x2-x1和y2-y1中较大者作为步进方向(假设x2-x1较大),取该方向上的增量为一个象素单位(△x=1),然后利用公式计算另一个方向的增量(△y=△x·m=m)。通过递推公式,把每次计算出的(xi+1,yi+1)经取整后送到显示器输出,则得到扫描转换后的直线。   之所以取x2-x1和y2-y1中较大者作为步进方向,是考虑沿着线段分布的象素应均匀,这在下图中可看出。   另外,算法实现中还应注意直线的生成方向,以决定Δx及Δy是取正值还是负值。 直线DDA算法实现 Void DDALine(int x1,int y1,int x2, int y2,int color) { int x; float k,y=y1; k=1.0*(y2-y1)/(x2-x1); for(x=x1;x=x2;x++) { putpixel(x, (int)(y+0.5),color); y=y+k; } }   按照从(x1, y1)到(x2, y2)方向不同,分8个象限。对于方向在第1a象限内的直线而言,取增量值Δx=1,Δy=m。对于方向在第1b象限内的直线而言,取增量值Δy=1,Δx=1/m。 直线方向的8个象限 象 限 ?△x??△y??   dx  dy 1a true 1   m 1b false 1/m 1 2a true -1 m 2b false -1/m 1 3a true -1 -m 3b false -1/m -1 4a true 1 -m 4b false 1/m -1 8个象限中的坐标增量值 直线DDA算法实现 void ddaline(int x1,int y1,int x2,int y2) {   int i,length;   float dx,dy,x=x1,y=y1; if (abs(x2-x1)=abs(y2-y1)) length=abs(x2-x1); else length=abs(y2-y1); dx=1.0*(x2-x1)/length; dy=1.0*(y2-y1)/length; for(i=1;i=length;i++) { putpixel((int)(x),(int)(y)); x=x+dx; y=y+dy; } }  直线DDA算法完善 使用DDA算法,每生成一条直线做两次除法,画线中每一点都要经过取整运算。x、y、dx、dy都必须用浮点数表示,这些都使得DDA算法的效率难以提高。 直线Bresenham算法描述  为了避免做费时的乘除运算和取整运算,Bresenham提出了一种更好的直线生成算法。其基本思想是借助一个决策变量来确定下一个像素点。  首先讨论m=△y/△x,当0≤m≤1且x1x2时(1a象限)的Bresenham算法。   假设直线上第i个象素点坐标已经确定,设为(xi,yi),那么,直线上下一个象素点的可能位置是(xi+1,yi)或(xi+1,yi+1)。(注意m1) 直线Bresenham算法描述 由图中可以知道:在x=xi+1处,直线上点的y值是y=m(xi+1)+b,该点离象素点(xi+1,yi)和象素点(xi+1,yi+1)的距离分别是d1和d2: d1=y-yi=m(xi+1)+b-yi d2=(yi+1)-y=(yi+1)-m(xi+1)-b 两个距离差是 d1-d2=2m(xi+1)-2yi+2b-1 直线Bresenham算法描述 我们来分析公式d1-d2=2m(xi+1)-2yi+2b-1    (1)当此值为正时,d1d2,说明直

文档评论(0)

tianjiao123 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档