Midpoint Algorithm (Bresenham) y = (dy/dx)x+b //slope-intercept 0 = dy x - dx y + c = Ax + By + C (x+1, y+1) F(x,y) = dy x - dx y + c NE F(x+1, y+1/2) = dy(x+1) - dx(y+1/2) + c (x+1, y+1/2) ^ O \ | Midpoint: Delta F = F(x+1, y+1/2) - F(x,y) = dy - 1/2dx \| --Line Delta NE = F(x+1, y+1) - F(x,y) = dy - dx (USEFUL TO DETERMINE WHICH DIRECTION A PIXEL WILL BE RASTORIZED) (x,y) ---/ Delta E = F(x+1, y) - F(x,y) = dy O---/ | O To avoid floats Bresenham multiplies the implicit equation by 2 E (x+1, y) Delta F = F(x+1, y+1/2) - F(x,y) = dy - 1/2dx => 2dy - dx Delta NE = F(x+1, y+1) - F(x,y) = dy - dx => 2dy - 2dx Delta E = F(x+1, y) - F(x,y) = dy => 2dy EXAMPLE | | | | | | | | | | | | F = 0 | | | | | | | | | | | | Draw(2,2) | | | | | | | |(.)|---|---|---|-(8,7) | | | | | | |(/)| | | | | F(x,y) = 2(5x - 6y + 2) = 10x - 12y + 4 //Check F + Delta F = 0 + 4 | | | | | |(/)| | | | | | F(2,3) = 20 - 36 + 4 = -12 //Since F + Delta F > 0 choose NE | | | |(/)|(/)| | | | | | | F(7,1) = 70 - 12 + 4 = 62 //Draw (3,3) | | |(/)| | | | | | | | | (2,2)--|---|(.)| | | | | | | | | | Delta F = 2dy - dx = 10 - 6 = 4 | | | | | | | | | | | | Draw(3,3) --------------------------------------------------------------------------------------------- F = F + Delta NE = -2 | Check F + Delta F = 6 + 4 = 10 Check F + Delta F = -2 + 4 = 2 | 10 > 0, choose NE Since 2 > 0, Choose NE | Draw(6,5) Draw(4,4) | F = F + Delta NE = 6 - 2 = 4 F = F + Delta NE = -2 - 2 = -4 | | Check F + Delta F = 4 + 4 = 8 Check F + Delta F = -4 + 4 = 0 | 8 > 0, choose NE Since 0 <= 0, Choose E | Draw(7,6) Draw(5,4) | F = 4 - 2 = 2 F = F + Delta E = -4 + 10 = 6 | ----------------------------------------------------------------------------------------------------------------------------------------------------- m = 5/6 Draw(6,5) Draw(2,2) 6 1/6 y = y + m = 2 5/6 Draw(7,6) x++ 7 Draw(3,3) Draw(8,7) x++ y = y + m = 2 5/6 + 5/6 = 3 4/6 DDR Method Draw(4,4) (Line changes are slight between the two algorithm) x++ y = y + m = 3 4/6 + 5/6 = 4 3/6 Draw(5,5) x++ y = 4 3/6 + 5/6 = 5 2/6 ------------------------------------------------------------------------------------------------------------------------------------------------------ | | | | | | | | | | | | F = 0 dy = 1 | | | | | | | | | | | | Draw(1,1) dx = 7 | | | | | | | | | | | | | | | | | | | | | | | | Delta F = -5 | | | | | | | | | | | | Delta NE = -12 | | | | | | | | | | | | Delta E = 2 | | | | | | | | | | | | | | | | |(.)|(.)|(.)|(.)|---|---|---|---(8,2) F + Delta F = 0 - 5 <= 0 (1,1)---|(.)|(.)|(.)|(.)| | | | | | | | Draw(2,1) F + Delta E = 2 ---------------------------------------------------------------------------------------------------------------------------------------- F + Delta F = 2 - 5 <= 0 F + Delta F = -6 - 5 <= 0 Draw(3,1) Draw(6,2) F + Delta E = 4 F + Delta E = -4 F + Delta F = 4 - 5 <= 0 F + Delta F = -4 - 5 <= 0 Draw(4,1) Draw(7,2) F + Delta E = 6 F + Delta E = -2 F + Delta F = 6 - 5 > 0 Draw(8,2) Draw(5,2) F + Delta NE = -6