Output Primitives / Display Techniques: - Line Drawing

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 20

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=mx+b
m = (y2 - y1) / (x2 - x1)
= y / x = dely / delx
xk+1 = xk + delx
yk+1 = yk + dely
= ?????

TWO ALTERNATIVES
= 1 / max [(x2-x1), (y2 - y1)] (BOOK)
= 1 / 2 K WHERE K IS SUCH THAT
2K-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

BRESENHAMS ALGO
WHICH PIXEL NEXT ??

?2

(xk yk)

? 1

BRESENHAMS 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 closer to 1 (pk
< 0), draw pixel 1 else
draw pixel 2 (in iteration
k+1)

Brezenhams 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

Brezenhams 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)

You might also like