27
Computer Graphics 6 Line Drawing Algorithms

CG06 - DDA Line Drawing

Embed Size (px)

Citation preview

Page 1: CG06 - DDA Line Drawing

Computer Graphics 6Line Drawing Algorithms

Page 2: CG06 - DDA Line Drawing

Contents

• Graphics hardware• The problem of scan conversion• Considerations• Line equations• Scan converting algorithms– A very simple solution– The DDA algorithm

• Conclusion

Page 3: CG06 - DDA Line Drawing

Graphics Hardware

• It’s worth taking a little look at how graphics hardware works before we go any further

• How do things end up on the screen?

Page 4: CG06 - DDA Line Drawing

Architecture Of A Graphics System

System Bus

CPU Display Processor

System Memory

Display Processor Memory

Frame Buffer

Video Controller MonitorMonitor

Page 5: CG06 - DDA Line Drawing

Output Devices

• There are a range of output devices currently available:– Printers/plotters– Cathode ray tube displays– Plasma displays– LCD displays– 3 dimensional viewers– Virtual/augmented reality headsets

• We will look briefly at some of the more common display devices

Page 6: CG06 - DDA Line Drawing

Basic Cathode Ray Tube (CRT)

• Fire an electron beam at a phosphor coated screen

Page 7: CG06 - DDA Line Drawing

Raster Scan Systems

• Draw one line at a time

Page 8: CG06 - DDA Line Drawing

Colour CRT

• An electron gun for each colour – red, green and blue

Page 9: CG06 - DDA Line Drawing

The Problem Of Scan Conversion

• A line segment in a scene is defined by the coordinate positions of the line end-points

x

y

(2, 2)

(7, 5)

Page 10: CG06 - DDA Line Drawing

The Problem (cont…)• But what happens when we try to draw this

on a pixel based display?

How do we choose which pixels to turn on?

Page 11: CG06 - DDA Line Drawing

Considerations

• Considerations to keep in mind:– The line has to look good• Avoid jaggies

– It has to be lightening fast!• How many lines need to be drawn in a typical scene?• This is going to come back to bite us again and again

Page 12: CG06 - DDA Line Drawing

Line Equations

• Let’s quickly review the equations involved in drawing lines

x

y

y0

yend

xendx0

Slope-intercept line equation:

bxmy where:

0

0

xx

yym

end

end

00 xmyb

Page 13: CG06 - DDA Line Drawing

Lines & Slopes• The slope of a line (m) is defined by its start

and end coordinates• The diagram below shows some examples of

lines and their slopes

m = 0

m = -1/3

m = -1/2

m = -1

m = -2m = -4

m = ∞

m = 1/3

m = 1/2

m = 1

m = 2m = 4

m = 0

Page 14: CG06 - DDA Line Drawing

A Very Simple Solution

• We could simply work out the corresponding y coordinate for each unit x coordinate

• Let’s consider the following example:

x

y

(2, 2)

(7, 5)

2 7

2

5

Page 15: CG06 - DDA Line Drawing

Example

x

y

(2, 2)

(7, 5)

2 3 4 5 6 7

2

5

5

3

27

25

m

5

42

5

32 b

• First work out m and b:

Now for each x value work out the y value:

5

32

5

43

5

3)3( y

5

13

5

44

5

3)4( y

5

43

5

45

5

3)5( y

5

24

5

46

5

3)6( y

Page 16: CG06 - DDA Line Drawing

Example (cont…)

• Now just round off the results and turn on these pixels to draw our line

35

32)3( y

35

13)4( y

45

43)5( y

45

24)6( y

0 1 2 3 4 5 6 7 8

0

1

2

3

4

5

6

7

Page 17: CG06 - DDA Line Drawing

A Very Simple Solution (cont…)

• However, this approach is just way too slow• In particular look out for:– The equation y = mx + b requires the

multiplication of m by x– Rounding off the resulting y coordinates

• We need a faster solution

Page 18: CG06 - DDA Line Drawing

A Quick Note About Slopes

• In the previous example we chose to solve the parametric line equation to give us the y coordinate for each unit x coordinate

• What if we had done it the other way around?• So this gives us:

• where: andm

byx

0

0

xx

yym

end

end

00 xmyb

Page 19: CG06 - DDA Line Drawing

A Quick Note About Slopes (cont…)

• Leaving out the details this gives us:

• We can see easily that this line doesn’t lookvery good!

• We choose which way to work out the line pixels based on the slope of the line

0 1 2 3 4 5 6 7 8

0

1

2

3

4

5

6

7

43

23)3( x 5

3

15)4( x

Page 20: CG06 - DDA Line Drawing

A Quick Note About Slopes (cont…)• If the slope of a line is between -1 and 1 then we

work out the y coordinates for a line based on it’s unit x coordinates

• Otherwise we do the opposite – x coordinates are computed based on unit y coordinates

m = 0

m = -1/3

m = -1/2

m = -1

m = -2m = -4

m = ∞

m = 1/3

m = 1/2

m = 1

m = 2m = 4

m = 0

Page 21: CG06 - DDA Line Drawing

The DDA Algorithm• The digital differential

analyzer (DDA) algorithm takes an incremental approach in order to speed up scan conversion

• Simply calculate yk+1

based on yk

The original differential analyzer was a physical machine developed by Vannevar Bush at MIT in the 1930’s in order to solve ordinary differential equations.

Page 22: CG06 - DDA Line Drawing

The DDA Algorithm (cont…)• Consider the list of points that we determined

for the line in our previous example:• (2, 2), (3, 23/5), (4, 31/5), (5, 34/5), (6, 42/5), (7, 5)

• Notice that as the x coordinates go up by one, the y coordinates simply go up by the slope of the line

• This is the key insight in the DDA algorithm

Page 23: CG06 - DDA Line Drawing

The DDA Algorithm (cont…)• If the slope is less than or equal to 1, we sample at unit x

intervals (Δx+1) and compute each successive y value as

• For lines with a positive slope greater than 1, we reverse the roles of x and y. We sample at unit y intervals (Δy+1) and calculate each succeeding x value as:

myy kk 1

mxx kk

11

Page 24: CG06 - DDA Line Drawing

The DDA Algorithm (cont…)• Again the values calculated by the equations

used by the DDA algorithm must be rounded to match pixel values

(xk, yk) (xk+1, yk+m)

(xk, round(yk))

(xk+1, round(yk+m))

(xk, yk) (xk+ 1/m, yk+1)

(round(xk), yk)

(round(xk+ 1/m), yk+1)

Page 25: CG06 - DDA Line Drawing

The DDA Algorithm Summary

• The DDA algorithm is much faster than our previous attempt– In particular, there are no longer any

multiplications involved• However, there are still two big issues:– Accumulation of round-off errors can make the

pixelated line drift away from what was intended– The rounding operations and floating point

arithmetic involved are time consuming

Page 26: CG06 - DDA Line Drawing

DDA AlgorithmProcedure lineDDA(xa, ya, xb, yb: integer);Var

dx, dy, steps, k: integer;xIncrement, yIncrement, x, y: real;

begindx := xb – xa;dy := yb – ya;if abs(dx) > abs(dy) then steps := abs(dx)else steps := abs(dy);xIncrement := dx /stepsyIncrement := dy /stepsx = xa;y = ya;setPixel(round(x), round(y), 1);for k := 1 to steps dobegin

x := x + xIncrement;y := y + yIncrement;setPixel(round(x), round(y), 1)

endend;

Page 27: CG06 - DDA Line Drawing

Conclusion

• Drawing lines to pixel based displays is time consuming so we need good ways to do it

• The DDA algorithm is pretty good – but we can do better