A Simple Circle Drawing Algorithm
• The equation for a2 circle is: 2
x y r 2
• 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:
y r 2 x2
A Simple Circle Drawing Algorithm (cont…)
y0 202 0 2 20
y1 202 12 20
y2 202 2 2 20
y19 202 192 6
y20 202 202 0
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 vertical
• Secondly, 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
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) (y, x)
R
2
(-y, -x) (y, -x)
(-x, -y) (x, -y)
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
The mid-point circle
only ever calculate the points for algorithm was
the top right eighth of a circle, developed by Jack
Bresenham, who we
and then use symmetry to get heard about earlier.
the rest of the points Bresenham’s patent for
the algorithm can be
viewed here.
Mid-Point Circle Algorithm (cont…)
• Assume that we have
(xk+1, yk)
just plotted point (xk, yk) (x , y )
k k
• The next point is a
choice between (xk+1, yk) (xk+1, yk-1)
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?
Mid-Point Circle Algorithm (cont…)
• Let’s re-jig the equation of the circle slightly to give
us:
f circ ( x, y ) x 2 y 2 r 2
• The equation evaluates as follows:
0, if ( x, y ) is inside the circle boundary
fcirc(x, y) 0, if ( x, y ) is on the circle boundary
0, if ( x, y ) is outside the circle boundary
• By evaluating this function at the midpoint between
the candidate pixels we can make our decision
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:
pk f circ ( xk 1, yk 1 )
2
( xk 1) 2 ( yk 1 ) 2 r 2
2
• 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
Mid-Point Circle Algorithm (cont…)
• To ensure things are as efficient as possible we can
do all of our calculations incrementally
• First consider:
pk 1 f circ xk 1 1, yk 1 1 2
• or:
[( xk 1) 1] yk 1
2
1
2
2
r 2
pk 1 ypk+1
• where k ( xk 1y) kor
is2either ( yyk k1-1 depending
2
yk ) ( yk 1 onykthe
2
) 1
sign of pk
Mid-Point Circle Algorithm (cont…)
• The first decision variable is given as:
p0 f circ (1, r 1 )
2
1 (r 1 ) 2 r 2
2
5 r
4
• Then if pk < 0 then the next decision variable is
given as:
pk 1 pk 2 xk 1 1
• If pk > 0 then the decision variable is:
pk 1 pk 2 xk 1 1 2 yk 1
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:
( 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
The Mid-Point Circle Algorithm (cont…)
• Otherwise the next point along the circle is (xk+1, yk-1)
and:
pk 1 pk 2 xk 1 1 2 yk 1
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:
x x xc y y yc
6. Repeat steps 3 to 5 until x >= y
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
Mid-Point Circle Algorithm Example
(cont…)
10 k pk (xk+1,yk+1) 2xk+1 2yk+1
9
8 0
7 1
6
2
5
4
3
3 4
2
5
1
0
6
0 1 2 3 4 5 6 7 8 9 10
Mid-Point Circle Algorithm Exercise
• Use the mid-point circle algorithm to draw the
circle centred at (0,0) with radius 15
Mid-Point Circle Algorithm Example
(cont…)
16
k pk (xk+1,yk+1) 2xk+1 2yk+1
15
14
0
13
1
12
11 2
10 3
9 4
8 5
7 6
6 7
5 8
4 9
3
10
2
11
1
0 12
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
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