/** * @brief Draw a line * * Draws a straight line between the two points. * * @param x1 the x coordinate of the first point * @param y2 the y coordinate of the first point * @param x1 the x coordinate of the second point * @param y2 the y coordinate of the second point * @param color the Color to of the line */ void CatPictureApp::drawLine(int x1, int y1, int x2, int y2, Color8u* color) // changed the names of the parametets, thought x1 would make more sense // to the user than xF, fairly arbitrary though.. might just be personal preference { //Implementation of Bresenham's line algorithm, derived from pseudocode //from Wikipedia. int dx = intMath->abs(x2 - x1); int dy = intMath->abs(y2 - y1); int sx = intMath->signum(x2 - x1); int sy = intMath->signum(y2 - y1); int err = dx - dy; int x = x1; int y = y1; while(true) { modify(color,x,y); if(x == x2 && y == y2) break; int e2 = 2 * err; if(e2 > -dy) { err -= dy; x += sx; } if(e2 < dx) { err += dx; y += sy; } } }
/** * Draws a straight line between the two points. * Params: xI = Initial X yI = Initial Y xF = Final X yF = Final Y color = Color to draw. */ void CatPictureApp::drawLine(int xI, int yI, int xF, int yF, Color8u* color) { //Implementation of Bresenham's line algorithm, derived from pseudocode //from Wikipedia. int dx = intMath->abs(xF - xI); int dy = intMath->abs(yF - yI); int sx = intMath->signum(xF - xI); int sy = intMath->signum(yF - yI); int err = dx - dy; int x = xI; int y = yI; while(true) { modify(color,x,y); if(x == xF && y == yF) break; int e2 = 2 * err; if(e2 > -dy) { err -= dy; x += sx; } if(e2 < dx) { err += dx; y += sy; } } }