Digital Drawing Techniques for Line and Curve Rendering on Raster Screens
200 likes | 323 Vues
Learn about line drawing with Digital Differential Analyzer (DDA) and Bresenham's Algorithm, circle and ellipse generation, utilizing efficient pixel addressing and display techniques in raster graphics.
Digital Drawing Techniques for Line and Curve Rendering on Raster Screens
E N D
Presentation Transcript
OUTPUT PRIMITIVES / DISPLAY TECHNIQUES • LINE DRAWING • TO DRAW LINE FROM (X1 Y1) TO (X2 Y2) (x2 y2) (x1y1)
RASTER SCREEN (x2 y2) (x1 y1)
DIGITAL DIFFERENTIAL ANALYZER (DDA) • y = m x + b • m = (y2 - y1) / (x2 - x1)= y / x = dely / delx • xk+1 = xk + delxyk+1 = yk + dely • = ?????
TWO ALTERNATIVES • = 1 / max [(x2-x1), (y2 - y1)] (BOOK) • = 1 / 2 K WHERE K IS SUCH THAT2K-1 < (max [(x2-x1), (y2 - y1)]) 2K
SIMPLE DDA delx = x2 - x1; dely = y2 - y1; steps = abs(dely); if abs (delx) > abs (dely) then steps = abs(delx); xinc = delx / steps; yinc = dely / steps; x = x1; y = y1; drawpixel (round(x), round(y)) for k = 1 to steps do begin x = x + xinc; y = y + yinc; drawpixel (round(x), round(y)) end end
BRESENHAM’S ALGO • WHICH PIXEL NEXT ?? ? 2 (xk yk) ? 1
BRESENHAM’S ALGO (contd) • Deviations from the specified line path • d1 = y - yk = m (xk + 1) + b - yk • d2 = yk + 1 -y = yk + 1 - m (xk + 1) - b • d1 - d2 = 2 m (xk + 1) - 2yk + 2b -1 • m = (y / x) • pk = x (d1 - d2) = 2y . xk - 2x . yk + c
Pk = error at beginning of next pixel If (at end of iteration k) true-line is below centre of pixel (pk < 0), draw pixel 1 else draw pixel 2 (in iteration k+1) 2 1
Brezenham’s algo (contd) • pk+1 - pk = 2 y (xk+1 -xk) - 2x (yk+1 -yk) = 2 y - 2x (yk+1 -yk) • For pixel 1: = 2 y • For pixel 2: = 2 y - 2x • Hence if pk < 0, choose pixel 1 in iteration k+1, pk+1 = pk + 2 y • else choose pixel 2 in iteration k+1, pk+1 = pk +2 y - 2 x • Initial p0 = 2 y - x
Brezenham’s algo (contd) pk + m - 1 pk + m pk = p0 = m - 0.5
Circle Generation • (x - a)2 + (y - b)2 = r2 • OR x = a + r cos ; y = b + r sin • (Fixed angular step size with lines between them) • (Step Size = 1/r) • OR m = dy / dx = - (x - a) / (y - b) • USE DDA with m as above
MIDPOINT CIRCLE ALGO Next midpoint ?? 1 yk Yk - 1 ?? 2 xk xk + 1
MIDPOINT CIRCLE • f (x, y) = x2 + y2 - r2 • pk = (xk + 1)2 + (yk - 0.5)2 - r2 (error at next midpoint) • If pk < 0 then Pixel 1 Else Pixel 2 (is closer to circle in iteration k+1) • pk+1 = [(xk + 1) + 1]2 + (yk+1 - 0.5)2 - r2 • pk+1 = pk + 2 (xk + 1) + (yk+12 - yk2) - (yk+1 -yk) + 1
MID POINT CIRCLE (contd) • Pk+1 - pk = 2 xk+1 + 1 OR = 2 xk+1 + 1 - 2yk+1 • p0 = 5/4 - r (PLEASE DERIVE) • INITIAL POINT = (0, r) • GET ONE POINT AND DUPLICATE IN 8 OCTANTS
ELLIPSE DRAWING • SLOPE BASED (DDA) • MIDPOINT ALGO • [(x - a) / rx]2 + [(y - b) / ry]2 = 1 • f (x, y) = (x - a)2 ry2 + (y - b)2 rx2 -rx2 ry2 • dy / dx = ???? • If f(x, y) < 0, point is inside the ellipse
MIDPOINT ELLIPSE (contd) • Where slope < 1, xk+1 = xk + 1 • Where slope > 1, yk+1 = yk - 1 • pk = ???? • Pk+1 - pk = ???? (For Regions 1 and 2)
OTHER CURVES • FOR IMPLICIT CURVES F (X, Y) = 0, DEVELOP MIDPOINT ALGO (eg, hyperbola, parabola)
OTHER CURVES • FOR EXPLICIT CURVES Y = F(X), OR PARAMETRIC CURVES - APPROXIMATE WITH STRAIGHT LINE SEGMENTS • Generate points at constant parameter values • Join them by straight lines • Closer points for larger curvatures
ADDRESSING PIXELS • BY PIXEL CENTERS • BY GRID OF PIXEL BOUNDARY LINES (H & V) • PREFERRED, AS • NO HALF INTEGER BOUNDARIES • PRECISE OBJECT REPRESENTATIONS • CONVENIENT IN RASTER ALGOS
SIZE OF OBJECTS • RECTANGLE (0, 0) --- (4, 3) ? ? ? ? (4, 3) ? ? ? (0, 0)