4
A circle has to be drawn with radius r and center at (xB c, B yB c B). First calculatepixel positons around a circular path centered at the coordinate origin (0, 0). Each calculated position (x, y) is moved to its proper position by adding xB c B to x and yB c B to y For the circle section from x = 0 to x = y in the first quadrant the slope of the curve varies from 0 to 1. So we can take unit steps in the positive x direction over this octant and use a decision parameter to determine which of the two possible y positions is closer to the circle path at each step. Positions in the other seven octants are then obtained by symmetry. The circle function is fB circle B (x, y) = xP 2 P + yP 2 P – rP 2 P Any point on the boundary of the circle with radius r satisfies the equation fB circle B (x, y) = 0. If the point is in the interior of the circle, the circle function is negative. If the point is outside the circle, the circle function is positive. The relative position of any point (x, y) can be determined by checking the sign of the circle function, < 0, if (x, y) is inside the circle boundary fB circle B (x, y) = 0, if (x, y) is on the circle boundary > 0, if (x, y) is outside the circle boundary The circle-function tests are performed for the mid positions between pixels near the circle path at each sampling step. Thus the circle function is the decision parameter in the midpoint algorithm. Midpoint yBk yBkB - 1 xBk xBkB + 1 xBkB + 2 xP 2 P + yP 2 P – rP 2 P = 0

Mid-Point Circle Algorithm

  • Upload
    kamar

  • View
    32

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Mid-Point Circle Algorithm

A circle has to be drawn with radius r and center at (xBc,B yBcB). First calculatepixel positons around a circular path centered at the coordinate origin (0, 0). Each calculated position (x, y) is moved to its proper position by adding x BcB to x and y BcB to y

For the circle section from x = 0 to x = y in the first quadrant the slope of the curve varies from 0 to 1. So we can take unit steps in the positive x direction over this octant and use a decision parameter to determine which of the two possible y positions is closer to the circle path at each step.

Positions in the other seven octants are then obtained by symmetry.

The circle function is

fBcircleB (x, y) = x P

2P + y P

2P – r P

2P

• Any point on the boundary of the circle with radius r satisfies the equation fBcircleB (x, y) = 0.

• If the point is in the interior of the circle, the circle function is negative.

• If the point is outside the circle, the circle function is positive.

The relative position of any point (x, y) can be determined by checking the sign of the circle function,

< 0, if (x, y) is inside the circle boundary

fBcircleB (x, y) = 0, if (x, y) is on the circle boundary

> 0, if (x, y) is outside the circle boundary

The circle-function tests are performed for the mid positions between pixels near the circle path at each sampling step. Thus the circle function is the decision parameter in the midpoint algorithm.

yBk

yBk B - 1

x Bk

Midpoint

x Bk B +

x P

2P + yP

2P – rP

2P = 0

1 x Bk B + 2

Page 2: Mid-Point Circle Algorithm

The figure shows the midpoint between the two candidate pixels at sampling position xk + 1. Assuming the pixel at (xk, yk) has been plotted, the next to determine whether the pixel at position (xk + 1, yk) or the one at position (xk + 1, yk - 1) is closer to the circle

Decision parameter is the circle function evaluated at the mid-point between these two pixels.

pk = fcircle (xk + 1, yk – ½)

= (xk + 1)2 + (yk – ½)2 – r2

If pk < 0, this midpoint is inside the circle and the pixel on scan line yk is closer to the circle boundary. Otherwise, the midpoint is outside or on the circle boundary, and we select the pixel on scanline yk – 1.

We obtain a recursive expression for the next decision parameter by evaluating the circle function at sampling position xk + 1 + 1 = xk + 2:

pk+1 = fcircle (xk + 1 + 1, yk + 1 – ½)

= [(xk + 1) + 1]2 + (yk + 1 – ½)2 – r2

= (xk + 1)2 + 2(xk + 1) + 1 + y2k + 1 – yk + 1 + (1/2)2 – r2

= (xk + 1)2 + 2(xk + 1) + 1 + y2k + 1 – yk + 1 + (1/2)2 – r2 + y2

k - y2k – yk + yk

= (xk + 1)2 + y2k – yk + (1/2)2 – r2 + 2(xk + 1) + y2

k + 1 – y2k – yk + 1 + yk + 1

= pk + 2(xk + 1) + (y2k + 1 – y2

k) – (yk + 1 – yk)+ 1

So,

Pk + 1 = pk + 2(xk + 1) + (y2k + 1 – y2

k) – (yk + 1 – yk)+ 1

where yk + 1 is either yk or yk – 1, depending on the sign of pk.

Increments for obtaining pk + 1 are either 2xk + 1 + 1 (if pk is negative) or 2xk + 1 + 1 – 2yk + 1.

Evaluation of terms 2xk + 1 and 2yk + 1 can also be done incrementally as

2xk + 1 = 2xk + 2

2yk + 1 = 2yk – 2

Page 3: Mid-Point Circle Algorithm

At the start position (0, r), these two terms have the values 0 and 2r, respectively. Each successive value is obtained by adding 2 to the previous value of 2x and subtracting 2 from the previous value of 2y.

The initial decision parameter is obtained by evaluating the circle function at the start position (xB0 B, yB0 B) = (0, r):

PB0 B = fBcircleB(1, r – ½)

= 1 + (r – ½) P

2P – r P

2P

= 1 + r P

2P – r + ¼ - r P

2P

= 5/4 – r

If the radius r is specified as an integer, we can simply round p B0 B to

pB0 B = 1 – r (for r an integer)

since all increments are integers.

Midpoint Circle Algorithm: 1. Input radius r and circle center (xBcB, yBcB), and obtain the first point on the circumference of

a circle centered on the origin as

(xB0 B, yB0 B) = (0, r)

2. Calculate the initial value of the decision parameter as

pB0 B = 5/4 – r

3. At each xBk B position, starting at k = 0, perform the following test: if p Bk B < 0, the next point along the circle centered on (0, 0) is (x Bk B + 1, y Bk B)

pBk + 1 B = p Bk B + 2x Bk + 1 B + 1

Otherwise, the next point along the circle is (xBk B + 1, y Bk B – 1) and

pBk + 1 B = p Bk B + 2x Bk + 1 B + 1 – 2y Bk + 1 B

where 2xBk + 1 B = 2x Bk B + 2 and 2y Bk + 1 B = 2y Bk B – 2.

4. Determine symmetry points in the other seven octants.

5. Move each calculated pixel position (x, y) onto the circular path centered on (xBcB, yBcB) and plot the coordinate values:

x = x + xBcB, y = y + yBcB

6. Repeat steps 3 through 5 until x ≥ y.

Page 4: Mid-Point Circle Algorithm

Example:

Plot a circle of radius r = 10 using mid-point circle algorithm for the second octant i.e. from x = 0 to x = y.

Soln.:

r = 10

p0 = 1 – r = -9

For the circle centered on the coordinate origin, the initial point is (x0, y0) = (0, 10), and the initial increment terms for calculating the decision parameters are

2x0 = 0, 2y0 = 20

Successive decision parameter values and positions along the circle path are calculated using the midpoint method as

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

0 -9 (1, 10) 2 20 1 -6 (2, 10) 4 20 2 -1 (3, 10) 6 20 3 6 (4, 9) 8 18 4 -3 (5, 9) 10 18 5 8 (6, 8) 12 16 6 5 (7, 7) 14 14