bresenham画线算法详解.docx

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
bresenham画线算法详解

给定两个点起点P1(x1,y1),P2(x2,y2),如何画它们直连的直线呢,即是如何得到上图所示的蓝色的点。假设直线的斜率0k0,直线在第一象限,Bresenham算法的过程如下: 1.画起点(x1,y1). 2.准备画下一个点,X坐标加1,判断如果达到终点,则完成。否则找下一个点,由图可知要画的点要么为当前点的右邻接点,要么是当前点的右上邻接点。   2.1.如果线段ax+by+c=0与x=x1+1的交点y坐标大于(y+*y+1))/2则选右上那个点   2.2.否则选右下那个点。 3.画点 4.跳回第2步 5.结束    具体的算法如下,原理就是比较目标直线与x+1直线交点的纵坐标,哪个离交点近就去哪个 voidBresenhamline(intx0,inty0,intx1,inty1,intcolor) {   intx,y,dx,dy;   floatk,e;   dx=x1-x0;   dy=y1-y0;   k=dy/dx;   e=-0.5;   x=x0;   y=y0;   for(x=x0;xx1;x++)   {     drawpixel(x,y,color);    //这个是画点子函数     e=e+k;     if(e0)     {       y++;       e=e-1;     }   } } 上述Bresenham算法在计算直线斜率与误差项时用到小数与除法。可以改用整数以避免除法。等式两边同时乘以2*dx,得到2*e*dx=2*e*dx+2dy,2*e*dx=2*e*dx-2*dx.由于算法中只用到误差项的符号,因此可作如下替换:2*e*dx.改进的Bresenham画线算法程序:将e统一乘以2*dx即变成了整数的Bresenhan算法了,^_^ voidInterBresenhamline(intx0,inty0,intx1,inty1,intcolor) {   intdx=x1-x0;   intdy=y1-y0;   intdx2=dx1;//乘2   intdy2=dy1;//乘2   inte=-dx;   intx=x0;   inty=y0;   for(x=x0;xx1;x++)   {         drawpixel(x,y,color);         e=e+dy2;       if(e0)         {           y++;           e=e-dx2;       }   } }

文档评论(0)

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

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

1亿VIP精品文档

相关文档