|
今天看了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);
} |
|