1 / 17
文档名称:

Bresenham中点画线算法.doc

格式:doc   大小:2,035KB   页数:17页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Bresenham中点画线算法.doc

上传人:儒林 2022/7/17 文件大小:1.99 MB

下载得到文件列表

Bresenham中点画线算法.doc

相关文档

文档介绍

文档介绍:Bresenham中点画线算法
先标明这转载自 
 
 
直线扫描算法之---bresenham改进算法(任何斜的,我们要消除除法和小数:
1.       消除除法
e=e+d;
e=e+dx/dy;
dy*e=dy*e+dx;
2.
       2*dy*e=2*dy*e+2dx;
由于算法中只用到误差项的符号,所以可以使用如下替换:
e’=2*e*dy
注意:为了让代换后符号不改变,必须保证dy>0,如果不满足,则可以按上述方法交换起点终点坐标。
 
 
代码如下:
void CMyDrawLineView::DrawBresenham(int x1,int x2,int y1,int y2,COLORREF color,CDC* pDC)
{
       int x,y,dx,dy,e;
       dx=x2-x1;
       dy=y2-y1;
       x=x1;
       y=y1;
       CString s;
//这里一定要注意,由于使用的是改进算法,所以dx一定是要大于0才能保证其符号不变
       if((dx>=0&&dy>=0)||(dx<=0&&dy<=0))    //如果k大于0
       {    
                     if(dx<0)                       //dx小于0说明终点x
                     {
                            dx=-dx;
                            x=x2;
                            dy=-dy;
                            y=y2;                   
}
 
              if(dy>=dx)                                  //第一种情况,k-(0,1)
              {
                     e=-dy;
                     for(int i=0;i<dy;i++)
                     {
                            pDC->SetPixel(x,y,color);
                            y++;
                            e=e+dx+dx;
                            if(e>=0)
                            {
                                   x++;
                                   e=e-dy-dy;
                            }
                     }
              }
}
}
 
 
 
 
-(-1)之间
如图三,在这种情况下可以类比斜率在0-1之间的情况,不过呢,我们要注意一个问题,就是现在的斜率是负数,我们使用时,需要改变符号,下面直接看改进:

e=e-dy/dx(注意是减号,因为现在的斜率是负数)
e*dx=e*dx-dy

2*e*dx= 2e*dx-2dy
由于算法中只用到误差项的符号,所以可以使用如下替换:
e’=2*e*dx
注意:为了让代换后符号不变,必须保证dx>0
d
d
代码如下:
void CMyDrawLineView::DrawBresenham(int x1,int x2,int y1,int y2,COLORREF color,CDC* pDC)
{
       int x,y,dx,dy,e;
       dx=x2-x1;
       dy=y2-y1;
       x=x1;
       y=y1;
       CString s;
//这里一定要注意,由于使用的是改进算法,所以dx一定是要大于0才能保证其符号不变
       if((dx>=0&&dy>=0)||(dx<=0&&dy<=0))    //如