大名鼎鼎的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; } } }