| 
 | 
 
今天看了Egui中的画线算法,对比了一下,各画了100000次,   
/* Bresenham */ 算法效率比我的高,快2-3秒,也比我的稍直一些, 
不过由于我的算法可自动裁减到指定矩形区域(我用的是屏幕矩形区域), 
有这么个优点,比方说重绘窗口中的线,而窗口一部分在屏幕里面不需要画, 
这时,就能发挥作用,而不需要额外计算窗口被屏幕裁剪后的矩形, 
和要画的线在裁剪后的矩形中的两点。 
现把脑动成果贡献出来,希望大家喜欢。:) 
/*----------------------------------------------------------------------------*/ 
/*                        Wrote By Kain,2006-12-8                               */ 
/*----------------------------------------------------------------------------*/ 
void Screen_Draw_Line(int x0, int y0, int x1, int y1, int Color) 
{ 
        int mx,my,dx,dy; 
 
/* all not in screen, user can't see it*/ 
        if(        (x0<0 && x1<0)||(x0 >Screen.Width - 1 && x1> Screen.Width - 1) || 
                        (y0<0 && y1<0)||(y0>=Screen.Height -1 && y1>=Screen.Height -1) ) 
                return; 
 
        if( y0 == y1 ) 
        { 
                Screen_Draw_Hline(y0,x0,x1,Color); 
                return; 
        } 
        if( x0 == x1 ) 
        { 
                Screen_Draw_Vline(x0,y0,y1,Color); 
                return; 
        } 
         
        mx = x1 + x0; 
        my = y1 + y0; 
 
        dx = 0; 
        dy = 0; 
        if(mx & 0x1) 
        { 
                dx = 1; 
        } 
        if(my & 0x1) 
        { 
                dy = 1; 
        } 
        if(x0 > x1) 
                dx = -dx; 
        if(y0 > y1) 
                dy = -dy; 
        Screen_Draw_Line(x0,y0,(mx - dx)/2,(my - dy)/2,Color); 
        Screen_Draw_Line((mx + dx)/2,(my + dy)/2,x1,y1,Color); 
} |   
 
 
 
 |