大名鼎鼎的Bresenahams画线算法,现在改成了J2ME版,此算法没有任何乘除运算,只有加减运算,效率很高.
/**
* @todo 基于Bresenahams的画直线算法
* @param g Graphics类
* @param x0 起点的x坐标
* @param y0 起点的y坐标
* @param x1 终点的x坐标
* @param y1 终点的y坐标
**/
private void drawLine2(Graphics g,int x0,int y0,int x1,int y1)
{
int dx,dy,dx2,dy2,x_inc,y_inc,e,index;
dx = x1 - x0; //deltas x
dy = y1 - y0; //deltas y
if(dx >= 0)
{
x_inc = 1;
}
else
{
x_inc = -1;
dx = -dx;
}
if(dy >= 0)
{
y_inc = 1;
}
else
{
y_inc = -1;
dy = -dy;
}
dx2 = dx << 1; //dx*2
dy2 = dy << 1; //dy*2
if(dx > dy)
{
e = dy2 - dx;
for(index = 0;index <= dx;index++)
{
//draw point
g.drawLine(x0,y0,x0,y0);
//compute next point
if (e >= 0)
{
e-=dx2;
y0+=y_inc;
}
e+=dy2;
x0+=x_inc;
}
}
else
{
e = dx2 - dy;
for (index=0; index <= dy; index++)
{
//draw point
g.drawLine(x0,y0,x0,y0);
//compute next point
if (e >= 0)
{
e-=dy2;
x0+=x_inc;
}
e+=dx2;
y0+=y_inc;
}
}
}