59
2 of 60 Towards the Ideal Line We can only do a discrete approximation Illuminate pixels as close to the true path as possible, consider bi- level display only – Pixels are either lit or not lit

Bresenham circlesandpolygons

Embed Size (px)

Citation preview

Page 1: Bresenham circlesandpolygons

2of60

Towards the Ideal Line

We can only do a discrete approximation

Illuminate pixels as close to the true path as possible, consider bi-level display only

– Pixels are either lit or not lit

Page 2: Bresenham circlesandpolygons

3of60

What is an ideal line

Must appear straight and continuous– Only possible axis-aligned and 45o lines

Must interpolate both defining end pointsMust have uniform density and intensity

– Consistent within a line and over all lines– What about antialiasing?

Must be efficient, drawn quickly– Lots of them are required!!!

UPES-Graphics

Page 3: Bresenham circlesandpolygons

4of60

Simple Line

Based on slope-intercept algorithm from algebra:

y = mx + b

Simple approach:

increment x, solve for y

Floating point arithmetic required

Page 4: Bresenham circlesandpolygons

5of60

LINE-DRAWING ALGORITHMS

Page 5: Bresenham circlesandpolygons

6of60

Does it Work?

It seems to work okay for lines with a slope of 1 or less,

but doesn’t work well for lines with slope greater than 1 – lines become more discontinuous in appearance and we must add more than 1 pixel per column to make it work.

Solution? - use symmetry.

Page 6: Bresenham circlesandpolygons

7of60

Modify algorithm per octant

OR, increment along x-axis if dy<dx

else increment along y-axis

Page 7: Bresenham circlesandpolygons

8of60

DDA algorithm

DDA = Digital Differential Analyser– finite differences

Treat line as parametric equation in t :

)()(

)()(

121

121

yytyty

xxtxtx

),(

),(

22

11

yx

yxStart point -End point -

Page 8: Bresenham circlesandpolygons

9of60

DDA Algorithm

Start at t = 0

At each step, increment t by dt

Choose appropriate value for dt

Ensure no pixels are missed:– Implies: and

Set dt to maximum of dx and dy

)()(

)()(

121

121

yytyty

xxtxtx

dt

dyyy

dt

dxxx

oldnew

oldnew

1dt

dx 1dt

dy

Page 9: Bresenham circlesandpolygons

10of60

DDA Algorithm

The digital differential analyzer (DDA)

myyxm kk 110.10.0 myyxm kk 110.10.0

mxxym kk

110.1 1

mxxym kk

110.1 1

myyxm kk 110.10.0

Equations are based on the assumption that lines are to be processed from the left endpoint to the right endpoint.

Page 10: Bresenham circlesandpolygons

11of60

#include 'device. h"

void lineDDA (int xa, int ya, int xb, int yb)

{ int dx = xb - xa, dy = yb - ya, steps, k;

float xIncrement, yIncrement, x = xa, y = ya;

if ( abs(dx) > abs(dy) ) steps = abs (dx) ;

else steps = abs dy);

xIncrement = dx / (float) steps;

yIncrement = dy / (float) steps;

setpixel (ROUNDlxl, ROUND(y) ) :

for (k=O; k<steps; k++) {

x += xIncrment;

y += yIncrement;

setpixel (ROUND(x), ROUND(y));

}}

1

DDA Algorithm

Page 11: Bresenham circlesandpolygons

12of60

DDA algorithm

line(int x1, int y1, int x2, int y2)

{float x,y;int dx = x2-x1, dy = y2-y1;int n = max(abs(dx),abs(dy));float dt = n, dxdt = dx/dt, dydt = dy/dt;

x = x1;y = y1;while( n-- ) {

point(round(x),round(y));x += dxdt;y += dydt;}

}

n - range of t.

UPES-Graphics

Page 12: Bresenham circlesandpolygons

13of60

DDA algorithm

Still need a lot of floating point arithmetic.– 2 ‘round’s and 2 adds per pixel.

Is there a simpler way ?

Can we use only integer arithmetic ?– Easier to implement in hardware.

UPES-Graphics

Page 13: Bresenham circlesandpolygons

14of60

Raster Scan System Random Scan System

Resolution It has poor or less Resolution because picture definition is stored as a intensity value.

It has High Resolution because it stores picture definition as a set of line commands.

Electron-Beam Electron Beam is directed from top to bottom and one row at a time on screen, but electron beam is directed to whole screen.

Electron Beam is directed to only that part of screen where picture is required to be drawn, one line at a time so also called Vector Display.

Cost It is less expensive than Random Scan System. It is Costlier than Raster Scan System.

Refresh Rate Refresh rate is 60 to 80 frame per second. Refresh Rate depends on the number of lines to be displayed i.e 30 to 60 times per second.

Picture Definition It Stores picture definition in Refresh Bufferalso called Frame Buffer.

It Stores picture definition as a set of line commandscalled Refresh Display File.

Line Drawing Zig – Zag line is produced because plotted value are discrete.

Smooth line is produced because directly the line path is followed by electron beam .

Realism in display It contains shadow, advance shading and hidden surface technique so gives the realistic display of scenes.

It does not contain shadow and hidden surface technique so it can not give realistic display of scenes.

Image Drawing It uses Pixels along scan lines for drawing an image. It is designed for line drawing applications and uses various mathematical function to draw.

Difference Between Raster Scan ystem and Random Scan System.

Page 14: Bresenham circlesandpolygons

15of60

The Bresenham Line Algorithm

The Bresenham algorithm is another incremental scan conversion algorithm

The big advantage of this algorithm is that it uses only integer calculations

Jack Bresenham worked for 27 years at IBM before entering academia. Bresenham developed his famous algorithms at IBM in the early 1960s

Page 15: Bresenham circlesandpolygons

16of60

The Big Idea

Move across the x axis in unit intervals and at each step choose between two different y coordinates

2 3 4 5

2

4

3

5For example, from position (2, 3) we have to choose between (3, 3) and (3, 4)

We would like the point that is closer to the original line

(xk, yk)

(xk+1, yk)

(xk+1, yk+1)

Page 16: Bresenham circlesandpolygons

17of60

The y coordinate on the mathematical line at xk+1 is:

Deriving The Bresenham Line Algorithm

At sample position xk+1

the vertical separations from the mathematical line are labelled dupper

and dlower

bxmy k )1(

y

yk

yk+1

xk+1

dlower

dupper

Page 17: Bresenham circlesandpolygons

18of60

So, dupper and dlower are given as follows:

and:

We can use these to make a simple decision about which pixel is closer to the mathematical line

Deriving The Bresenham Line Algorithm (cont…)

klower yyd

kk ybxm )1(

yyd kupper )1(

bxmy kk )1(1

Page 18: Bresenham circlesandpolygons

19of60

This simple decision is based on the difference between the two pixel positions:

Let’s substitute m with ∆y/∆x where ∆x and ∆y are the differences between the end-points:

Deriving The Bresenham Line Algorithm (cont…)

122)1(2 byxmdd kkupperlower

)122)1(2()(

byxx

yxddx kkupperlower

)12(222 bxyyxxy kk

cyxxy kk 22

Page 19: Bresenham circlesandpolygons

20of60

So, a decision parameter pk for the kth step

along a line is given by:

The sign of the decision parameter pk is the

same as that of dlower – dupper

If pk is negative, then we choose the lower

pixel, otherwise we choose the upper pixel

Deriving The Bresenham Line Algorithm (cont…)

cyxxy

ddxp

kk

upperlowerk

22

)(

Page 20: Bresenham circlesandpolygons

21of60

Remember coordinate changes occur along the x axis in unit steps so we can do everything with integer calculations

At step k+1 the decision parameter is given as:

Subtracting pk from this we get:

Deriving The Bresenham Line Algorithm (cont…)

cyxxyp kkk 111 22

)(2)(2 111 kkkkkk yyxxxypp

Page 21: Bresenham circlesandpolygons

22of60

But, xk+1 is the same as xk+1 so:

where yk+1 - yk is either 0 or 1 depending on

the sign of pk

The first decision parameter p0 is evaluated at (x0, y0) is given as:

Deriving The Bresenham Line Algorithm (cont…)

)(22 11 kkkk yyxypp

xyp 20

Page 22: Bresenham circlesandpolygons

23of60

The Bresenham Line Algorithm

BRESENHAM’S LINE DRAWING ALGORITHM(for |m| < 1.0)

1. Input the two line end-points, storing the left end-point in (x0, y0)

2. Plot the point (x0, y0)

3. Calculate the constants Δx, Δy, 2Δy, and (2Δy - 2Δx) and get the first value for the decision parameter as:

4. At each xk along the line, starting at k = 0, perform the

following test. If pk < 0, the next point to plot is

(xk+1, yk) and:

xyp 20

ypp kk 21

Page 23: Bresenham circlesandpolygons

24of60

The Bresenham Line Algorithm (cont…)

ACHTUNG! The algorithm and derivation above assumes slopes are less than 1. for other slopes we need to adjust the algorithm slightly

Otherwise, the next point to plot is (xk+1, yk+1) and:

5. Repeat step 4 (Δx – 1) times

xypp kk 221

Page 24: Bresenham circlesandpolygons

25of60

Bresenham Example

Let’s have a go at this

Let’s plot the line from (20, 10) to (30, 18)

First off calculate all of the constants:– Δx: 10

– Δy: 8

– 2Δy: 16

– 2Δy - 2Δx: -4

Calculate the initial decision parameter p0:

– p0 = 2Δy – Δx = 6

Page 25: Bresenham circlesandpolygons

26of60

Bresenham Example (cont…)

17

16

15

14

13

12

11

10

18

292726252423222120 28 30

k Pk (xk+1,yk+1)

0

1

2

3

4

5

6

7

8

9

P0

Page 26: Bresenham circlesandpolygons

27of60

Bresenham Exercise

Go through the steps of the Bresenham line drawing algorithm for a line going from (21,12) to (29,16)

Page 27: Bresenham circlesandpolygons

28of60

Bresenham Exercise (cont…)

17

16

15

14

13

12

11

10

18

292726252423222120 28 30

k pk (xk+1,yk+1)

0

1

2

3

4

5

6

7

8

Page 28: Bresenham circlesandpolygons

29of60

Bresenham Line Algorithm Summary

The Bresenham line algorithm has the following advantages:

– An fast incremental algorithm– Uses only integer calculations

Comparing this to the DDA algorithm, DDA has the following problems:

– 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 29: Bresenham circlesandpolygons

30of60

A Simple Circle Drawing Algorithm

The equation for a circle is:

where r is the radius of the circle

So, we can write a simple circle drawing algorithm by solving the equation for y at unit x intervals using:

222 ryx

22 xry

Page 30: Bresenham circlesandpolygons

31of60

A Simple Circle Drawing Algorithm (cont…)

20020 220 y

20120 221 y

20220 222 y

61920 2219 y

02020 2220 y

Page 31: Bresenham circlesandpolygons

32of60

A Simple Circle Drawing Algorithm (cont…)

However, unsurprisingly this is not a brilliant solution!Firstly, the resulting circle has large gaps where the slope approaches the verticalSecondly, the calculations are not very efficient

– The square (multiply) operations– The square root operation – try really hard to

avoid these!

We need a more efficient, more accurate solution

Page 32: Bresenham circlesandpolygons

33of60

Eight-Way Symmetry

The first thing we can notice to make our circle drawing algorithm more efficient is that circles centred at (0, 0) have eight-way symmetry

(x, y)

(y, x)

(y, -x)

(x, -y)(-x, -y)

(-y, -x)

(-y, x)

(-x, y)

2

R

Page 33: Bresenham circlesandpolygons

34of60

Mid-Point Circle Algorithm

Similarly to the case with lines, there is an incremental algorithm for drawing circles – the mid-point circle algorithm

In the mid-point circle algorithm we use eight-way symmetry so only ever calculate the points for the top right eighth of a circle, and then use symmetry to get the rest of the points

The mid-point circle algorithm was developed by Jack Bresenham, who we heard about earlier. Bresenham’s patent for the algorithm can be viewed here.

Page 34: Bresenham circlesandpolygons

35of60

Mid-Point Circle Algorithm (cont…)

(xk+1, yk)

(xk+1, yk-1)

(xk, yk)

Assume that we have just plotted point (xk, yk)

The next point is a choice between (xk+1, yk) and (xk+1, yk-1)

We would like to choose the point that is nearest to the actual circle

So how do we make this choice?

Page 35: Bresenham circlesandpolygons

36of60

Mid-Point Circle Algorithm (cont…)

the equation of the circle slightly to give us:

The equation evaluates as follows:

By evaluating this function at the midpoint between the candidate pixels we can make our decision

222),( ryxyxfcirc

,0

,0

,0

),( yxfcirc

boundary circle theinside is ),( if yx

boundary circle on the is ),( if yx

boundary circle theoutside is ),( if yx

Page 36: Bresenham circlesandpolygons

37of60

Mid-Point Circle Algorithm (cont…)

Assuming we have just plotted the pixel at (xk,yk) so we need to choose between (xk+1,yk) and (xk+1,yk-1)Our decision variable can be defined as:

If pk < 0 the midpoint is inside the circle and and the pixel at yk is closer to the circle

Otherwise the midpoint is outside and yk-1 is closer

222 )21()1(

)21,1(

ryx

yxfp

kk

kkcirck

Page 37: Bresenham circlesandpolygons

38of60

Mid-Point Circle Algorithm (cont…)

To ensure things are as efficient as possible we can do all of our calculations incrementallyFirst consider:

or:

where yk+1 is either yk or yk-1 depending on the sign of pk

22

12

111

21]1)1[(

21,1

ryx

yxfp

kk

kkcirck

1)()()1(2 122

11 kkkkkkk yyyyxpp

Page 38: Bresenham circlesandpolygons

39of60

Mid-Point Circle Algorithm (cont…)

The first decision variable is given as:

Then if pk < 0 then the next decision variable

is given as:

If pk > 0 then the decision variable is:

r

rr

rfp circ

45

)21(1

)21,1(

22

0

12 11 kkk xpp

1212 11 kkkk yxpp

Page 39: Bresenham circlesandpolygons

40of60

The Mid-Point Circle Algorithm

MID-POINT CIRCLE ALGORITHM

• Input radius r and circle centre (xc, yc), then set the coordinates for the first point on the circumference of a circle centred on the origin as:

• Calculate the initial value of the decision parameter as:

• Starting with k = 0 at each position xk, perform the following test. If pk < 0, the next point along the circle centred on (0, 0) is (xk+1, yk) and:

),0(),( 00 ryx

rp 45

0

12 11 kkk xpp

Page 40: Bresenham circlesandpolygons

41of60

The Mid-Point Circle Algorithm (cont…)

Otherwise the next point along the circle is (xk+1, yk-1) and:

Where 2xk+1=2xk+2and 2yk+1=2yk-2

4. Determine symmetry points in the other seven octants

5. Move each calculated pixel position (x, y) onto the circular path centred at (xc, yc) to plot the coordinate values:

6. Repeat steps 3 to 5 until x >= y

111 212 kkkk yxpp

cxxx cyyy

Page 41: Bresenham circlesandpolygons

42of60

Mid-Point Circle Algorithm Example

To see the mid-point circle algorithm in action lets use it to draw a circle centred at (0,0) with radius 10

Page 42: Bresenham circlesandpolygons

43of60

Mid-Point Circle Algorithm Example (cont…)

9

7

6

5

4

3

2

1

0

8

976543210 8 10

10 k pk (xk+1,yk+1) 2xk+1 2yk+1

0

1

2

3

4

5

6

Page 43: Bresenham circlesandpolygons

44of60

Mid-Point Circle Algorithm Exercise

Use the mid-point circle algorithm to draw the circle centred at (0,0) with radius 15

Page 44: Bresenham circlesandpolygons

45of60

Mid-Point Circle Algorithm Example (cont…)

k pk (xk+1,yk+1) 2xk+1 2yk+1

0

1

2

3

4

5

6

7

8

9

10

11

12

9

76543210

8

976543210 8 10

10

131211 14

15

1312

14

11

16

1516

Page 45: Bresenham circlesandpolygons

46of60

Mid-Point Circle Algorithm Summary

The key insights in the mid-point circle algorithm are:

– Eight-way symmetry can hugely reduce the work in drawing a circle

– Moving in unit steps along the x axis at each point along the circle’s edge we need to choose between two possible y coordinates

Page 46: Bresenham circlesandpolygons

47of60

Filling Polygons

So we can figure out how to draw lines and circles

How do we go about drawing polygons?

We use an incremental algorithm known as the scan-line algorithm

Page 47: Bresenham circlesandpolygons

48of60

Scan-Line Polygon Fill Algorithm

2

4

6

8

10 Scan Line

02 4 6 8 10 12 14 16

Page 48: Bresenham circlesandpolygons

49of60

Scan-Line Polygon Fill Algorithm

The basic scan-line algorithm is as follows:– Find the intersections of the scan line with all

edges of the polygon– Sort the intersections by increasing x

coordinate– Fill in all pixels between pairs of intersections

that lie interior to the polygon

Page 49: Bresenham circlesandpolygons

50of60

Scan-Line Polygon Fill Algorithm (cont…)

Page 50: Bresenham circlesandpolygons

51of60

Line Drawing Summary

Over the last couple of lectures we have looked at the idea of scan converting lines

The key thing to remember is this has to be FAST

For lines we have either DDA or Bresenham

For circles the mid-point algorithm

Page 51: Bresenham circlesandpolygons

52of60

Anti-Aliasing

Page 52: Bresenham circlesandpolygons

53of60

Summary Of Drawing Algorithms

Page 53: Bresenham circlesandpolygons

54of60

Mid-Point Circle Algorithm (cont…)

6

2 3 41

5

4

3

Page 54: Bresenham circlesandpolygons

55of60

Mid-Point Circle Algorithm (cont…)

M

6

2 3 41

5

4

3

Page 55: Bresenham circlesandpolygons

56of60

Mid-Point Circle Algorithm (cont…)

M

6

2 3 41

5

4

3

Page 56: Bresenham circlesandpolygons

57of60

Blank Grid

Page 57: Bresenham circlesandpolygons

58of60

Blank Grid

Page 58: Bresenham circlesandpolygons

59of60

Blank Grid

9

7

6

5

4

3

2

1

0

8

976543210 8 10

10

Page 59: Bresenham circlesandpolygons

60of60

Blank Grid