190 likes | 449 Vues
Raster conversion algorithms for line and circle. Introduction - Pixel addressing - Primitives and attributes Line drawing algorithms - DDA - Bresenham Circle generating algorithms - Direct method - Bresenham algorithm. Pixel addressing in raster graphics.
E N D
Raster conversion algorithms for line and circle Introduction - Pixel addressing - Primitives and attributes Line drawing algorithms - DDA - Bresenham Circle generating algorithms - Direct method - Bresenham algorithm
Raster conversion algorithms: requirements • visual accuracy • spatial accuracy • speed
Digital Differential Algorithm • input line endpoints, (x0,y0) and (xn, yn) • set pixel at position (x0,y0) • calculate slope m • Case |m|≤1: repeat the following steps until (xn, yn) is reached: • yi+1 = yi + y/ x • xi+1 = xi + 1 • set pixel at position (xi+1,Round(yi+1)) • Case |m|>1: repeat the following steps until (xn, yn) is reached: • xi+1 = xi + x/ y • yi+1 = yi + 1 • set pixel at position (Round(xi+1), yi+1)
y = mx + b d2 y = m(x+1) + b d1 Bresenham's line algorithm y = mx + b y x x+1
Bresenham's line algorithm (slope ≤ 1) • input line endpoints, (x0,y0) and (xn, yn) • calculate x = xn - x0 and y = yn - y0 • calculate parameter p0 = 2 y - x • set pixel at position (x0,y0) • repeat the following steps until (xn, yn) is reached: • if pi < 0 • set the next pixel at position (xi +1, yi ) • calculate new pi+1 = pi + 2 y • if pi ≥ 0 • set the next pixel at position (xi +1, yi + 1 ) • calculate new pi+1 = pi + 2(y - x)
DDA versus Bresenham’s Algorithm • DDA works with floating point arithmetic • Rounding to integers necessary • Bresenham’s algorithm uses integer arithmetic • Constants need to be computed only once • Bresenham’s algorithm generally faster than DDA
Circle generating algorithms • Direct • Polar coordinate based • Bresenham’s
Direct circle algorithm • Cartesian coordinates • Circle equation: ( x - xc )2 + ( y - yc )2 = r2 • Step along x axis from xc - r to xc + r and calculate y = yc ± r2 - ( x - xc )2
Polar coordinates • Polar coordinate equation x = xc + r cos y = yc + r sin • step through values of from 0 to 2π
Optimisation and speed-up • Symmetry of a circle can be used • Calculations of point coordinates only for a first one-eighth of a circle (-x,y) (x,y) (-y,x) (y,x) (-y,-x) (y,-x) (-x,-y) (x,-y)
Bresenham’s circle algorithm 1. Input radius r 2. Plot a point at (0, r) 3. Calculate the initial value of the decision parameter as p0 = 5/4 – r ≈ 1 – r
4. At each position xk, starting at k = 0, perform the following test: if pk < 0 plot point at (xk +1, yk) compute new pk+1 = pk + 2xk+1 + 1 else plot point at (xk + 1, yk – 1) compute new pk+1 = pk + 2xk+1 + 1 – 2yk+1 where xk+1 = xk + 1 and yk+1 = yk - 1
5. Determine symmetry points in the other seven octants and plot points 6. Repeat steps 4 and 5 until x y