1.17k likes | 3.15k Vues
Bresenham Circle Drawing Algorithm,. Contents. In today’s lecture we’ll have a look at: Bresenham’s Circle drawing algorithm Exercise using Bresenham’s algorithm. CIRCLE. The set of points that are all at a given distance ‘r’ from a center position (Xc,Yc).
E N D
Contents • In today’s lecture we’ll have a look at: • Bresenham’s Circle drawing algorithm • Exercise using Bresenham’s algorithm
CIRCLE • The set of points that are all at a given distance ‘r’ from a center position (Xc,Yc).
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:
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 (-x, y) (x, y) (-y, x) (y, x) (-y, -x) (y, -x) (-x, -y) (x, -y) • 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
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.
Mid-Point Circle Algorithm (cont…) (xk+1, yk) (xk, yk) (xk+1, yk-1) • 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?
Mid-Point Circle Algorithm (cont…) • Let’s re-jig the equation of the circle slightly to give us: • …(1) • The equation evaluates as follows: • 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:mid point b/w 2 points (xk+1,Yk) and (Xk+1, Yk-1) is [xk+1, yk-1/2] • ...2 • If pk < 0 the midpoint is inside the circle and the pixel at yk is closer to the circle • Otherwise the midpoint is outside and yk-1 is closer
Mid-Point Circle Algorithm (cont…) • To ensure things are as efficient as possible we can do all of our calculations incrementally • First consider: ( since Xk+1 = Xk+1) • or: • where yk+1 is either yk or yk-1 depending on the sign of pk
the initial value of Pk is given by the circle function at the position (0,r) as, • Substituting k=0,Xk=0,Yk=r in the above function results in,
Mid-Point Circle Algorithm (cont…) • The first decision variable is given as: • if r is an integer, then Po can be rounded to P0= 1 – r. • Then if pk < 0 then the next decision variable is given as: • If pk > 0 then the decision variable is:
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: • Perform the test, Starting with k = 0 at each position xk, perform the following test. • (i) If pk < 0, the next point along the circle centred on (0, 0) is (xk+1, yk) and:
The Mid-Point Circle Algorithm (cont…) • (ii) If Pk >0 then the next point along the circle is (xk+1, yk-1) and: • where = 2Xk+2 and = 2Yk – 2 • Identify the symmetry points in the other seven octants • Move (x, y) according to: • 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 • Determine the positions along the circle octant in the first quadrant from x=0 to x=y. • The intial value of the decision parameter is • P0 = 1-r = 1-10 = -9 • For circle centred on the coordinate origin, the initial point is (X0,Y0)=(0,10) and initial increment terms for calculating the decision parameters are • 2X0 =0 and 2Y0 = 20
K=0 and P0 = -9 (1,10) • (pk<0) • K=1, P1=P0+2Xk+1 => -9+2(1)+1 =-9+3=-6 (2,10) • K=2, P2= P1 +2(2)+1 = -6+4+1 = -1 (3,10) • K=3 P3=P2+2(3)+1 = -1+7= 6 (4,9) • K=4 (Pk>0) • P4= P3+2(4)+1-2(9) => 6+8+1-18 = -3 (5,9) • K=5 p5= p4+2(5)+1 => -3+10+1 = 8 (6,8) • K=6 p6=8+2(6)+1-2(8) => 8+12+1-16 = 5 (7,7) • K=7 p7= 6 (8,6) • K=8 p8=11 (9,5) • K=9 p9 =20 (10,4)
Mid-Point Circle Algorithm Example (cont…) 10 9 8 7 6 5 4 3 2 1 0 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 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 11 12 13 14 15 16 0 1 2 3 4 5 6 7 8 9 10
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
Mid-Point Circle Algorithm (cont…) 6 5 4 3 1 2 3 4
Mid-Point Circle Algorithm (cont…) 6 5 4 3 1 2 3 4
Mid-Point Circle Algorithm (cont…) 6 M 5 4 3 1 2 3 4
Mid-Point Circle Algorithm (cont…) 6 M 5 4 3 1 2 3 4
Mid-Point Circle Algorithm (cont…) 6 M 5 4 3 1 2 3 4
Blank Grid 10 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 10