Graphics6 BresenhamCirclesAndPolygons
Graphics6 BresenhamCirclesAndPolygons
Graphics6 BresenhamCirclesAndPolygons
2 of 39
Contents
In todays lecture well have a look at:
Bresenhams line drawing algorithm Line drawing algorithm comparisons Circle drawing algorithms
A simple technique The mid-point circle algorithm
3 of 39
4 of 39
5 of 39
xk+1 and dlower The y coordinate on the mathematical line at xk+1 is:
y = m( xk + 1) + b
6 of 39
d lower = y yk = m( xk + 1) + b yk
and:
d upper = ( yk + 1) y
= yk + 1 m( xk + 1) b
We can use these to make a simple decision about which pixel is closer to the mathematical line
7 of 39
= 2y xk 2x yk + c
8 of 39
= 2y xk 2x yk + c
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
9 of 39
pk +1 pk = 2y ( xk +1 xk ) 2x( yk +1 yk )
10 of 39
pk +1 = pk + 2y 2x( yk +1 yk )
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: p0 = 2y x
11 of 39
1. 2. 3.
p0 = 2y x
4.
At each xk along the line, starting at k = 0, perform the following test. If pk < 0, the next point to plot is
pk +1 = pk + 2y
12 of 39
pk +1 = pk + 2y 2x
5. Repeat step 4 (x 1) times
ACHTUNG! The algorithm and derivation above assumes slopes are less than 1. for other slopes we need to adjust the algorithm slightly
13 of 39
Bresenham Example
Lets have a go at this Lets plot the line from (20, 10) to (30, 18) First off calculate all of the constants: x: 10 y: 8 2y: 16 2y - 2x: -4 Calculate the initial decision parameter p0: p0 = 2y x = 6
14 of 39
18 17 16 15 14 13 12 11 10
15 of 39
Bresenham Exercise
Go through the steps of the Bresenham line drawing algorithm for a line going from (21,12) to (29,16)
16 of 39
18 17 16 15 14 13 12 11 10
17 of 39
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
18 of 39
19 of 39
y1 = 20 2 12 20 y2 = 20 2 2 2 20
y19 = 20 2 19 2 6
y20 = 20 2 20 2 0
20 of 39
21 of 39
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) (x, y)
(-y, x)
R 2
(y, x)
(y, -x)
(x, -y)
22 of 39
The mid-point circle algorithm was developed by Jack Bresenham, who we heard about earlier. Bresenhams patent for the algorithm can be viewed here.
23 of 39
The next point is a choice between (xk+1, yk) and (xk+1, yk-1)
(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?
24 of 39
By evaluating this function at the midpoint between the candidate pixels we can make our decision
25 of 39
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
26 of 39
or:
= [( xk + 1) + 1] + yk +1 1
) 2
pk +1 = pk + 2( xk + 1) + ( y
2 k +1
y ) ( yk +1 yk ) + 1
2 k
27 of 39
28 of 39
( x0 , y0 ) = (0, r )
Calculate the initial value of the decision parameter as:
p0 = 5 r 4
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:
pk +1 = pk + 2 xk +1 + 1
29 of 39
pk +1 = pk + 2 xk +1 + 1 2 yk +1
4. 5. Determine symmetry points in the other seven octants Move each calculated pixel position (x, y) onto the circular path centred at (xc, yc) to plot the coordinate values:
x = x + xc
6.
y = y + yc
30 of 39
31 of 39
10 9 8 7 6 5 4 3 2 1 0
pk
(xk+1,yk+1)
2xk+1
2yk+1
32 of 39
33 of 39 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
pk
(xk+1,yk+1)
2xk+1
2yk+1
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
34 of 39
35 of 39
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
36 of 39 10
10
12
14
16
37 of 39
38 of 39
39 of 39
40 of 39
Anti-Aliasing
41 of 39
42 of 39
3 1 2 3 4
43 of 39
3 1 2 3 4
44 of 39
M
5
3 1 2 3 4
45 of 39
Blank Grid
46 of 39
Blank Grid
47 of 39
Blank Grid
10 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 10
48 of 39
Blank Grid