You are on page 1of 37

# Circle Generating Algorithms

Circle is a frequently used components in pictures and graphs , a procedure for generating either full circles or circular arcs is included in most graphics packages. Circle is a set of points that are all at a given distance r from center position (xc, yc). The distance relationship equation of a circle is expressed by the Pythagorean theorem in Cartesian coordinates as:
( x xc)2 + ( y yc)2 = r2

## Circle Generating Algorithms

We can re-write the circle equation as: y = yc ( r2 ( x xc)2 )0.5 By substitution with x , xc and yc we can get y. Two problems with this approach: it involves considerable computation at each step. The spacing between plotted pixel positions is not uniform.

CS 380

## Circle Generating Algorithms

Polar coordinates (r and ) are used to eliminate the unequal spacing shown above. Expressing the circle equation in parametric polar form yields the pair of equations x = xc + r cos y = yc + r sin When a circle is generated with these equations using a fixed angular step size, a circle is plotted with equally spaced points along the circumference. The step size chosen depends on the application and the display device. Larger angular separations along the circumference can be connected with straight lines.

## Circle Generating Algorithms

The Cartesian equation involves multiplications and square root calculations. Parametric equations contain multiplications and trigonometric calculations. Efficient circle algorithms are based on incremental calculations of decision parameters which involves only integer calculations.

## Midpoint Circle Algorithm (BASICS)

Computation can be reduced by considering the symmetry of circles. The shape of the circle is similar in each quadrant. There is also symmetry between octants. Adjacent octant within one quadrant are symmetric with 45 line dividing the two octants. We can generate all pixel positions around a circle by calculating only the points within the sector from x=0 to x=y

## Midpoint Circle Algorithm

A method for direct distance comparison is to test the halfway position between two pixels to determine if this midpoint is inside or outside the circle boundary. This method is more easily applied to other conics, and for an integer circle radius. we sample x at unit intervals and determine the closest pixel position to the specified circle path at each step.

## Midpoint Circle Algorithm

For a given radius r and screen center position (xc, yc), we can first set up our algorithm to calculate pixel positions around a circle path centered at the coordinate origin ( 0, 0 ). Then each calculated position (x, y) is moved to its proper screen position by adding xc to x and yc to y. Along the circle section from x = 0 to x = y in the first quadrant, the slope of the curve varies from 0 to - 1. Therefore, 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.

## Mid-point Circle Algorithm

Consider current position (xk, yk) Next point position is (xk+1, yk) or (xk+1, yk-1)?

xk

xk+2

## Mid-point Circle Algorithm

Our decision parameter is the earlier circle function evaluated at the mid point between the 2 pixels

pk

## Midpoint Circle Algorithm

Positions in the other seven octants are then obtained by symmetry. To apply the midpoint method. we define a circle function: fcircle(x, y) = x + y r Any point (x, y) on the boundary of the circle with radius r satisfies the equation fcircle( x, y ) = 0. If fcircle( x, y ) < 0, the point is inside the circle boundary , If fcircle( x, y ) > 0, the point is outside the circle boundary, If fcircle( x, y ) = 0, the point is on the circle boundary.

## Mid-point Circle Algorithm Calculating pk

First, set the pixel at (xk , yk ), next determine whether the pixel (xk + 1, yk ) or the pixel (xk + 1, yk 1) is closer to the circle using: pk = fcircle (xk + 1,yk ) = (xk + 1)+(yk ) r Successive decision parameters are obtained using incremental calculations. Pk +1 = fcircle (xk + 1 + 1,yk + 1 ) =[(xk + 1) + 1 ] + (yk + 1 ) r Pk +1 = pk + 2(xk + 1) + (yk+ 1 yk ) (yk+ 1 yk ) + 1 If pk<0 this midpoint is inside the circle select yk Pk +1= pk+ 2(xk + 1)+1 or pk+1 = pk + 2xk + 1 + 1, else mid position is outside or on the circle boundary select yk 1 pk+1 = pk + 2xk+1 + 1 2yk+1 where 2xk + 1 = 2xk + 2 and 2yk + 1 = 2yk 2. Depending upon the sign of pk.

## Mid-point Circle Algorithm Calculating p0

The initial decision parameter is obtained by evaluating the circle function at the start position (x0,y0)=(0,r) p0 = fcircle (1, r ) = 1 + (r ) r p0 = 5 /4 r If the radius r is specified as an integer, simply round p0 to P0= 1 r

## Midpoint Circle Algorithm

1.

Input radius r and circle center (xc, yc ). set the first point (x0 , y0 ) = (0, r ). Calculate the initial value of the decision parameter as p0 = 1 r. At each xk position, starting at k = 0, perform the following test: If pk < 0, plot (xk + 1, yk ) and pk+1 = pk + 2xk + 1 + 1, Otherwise, plot (xk+ 1, yk 1 ) and pk+1 = pk + 2xk+1 + 1 2yk+1, where 2xk + 1 = 2xk + 2 and 2yk + 1 = 2yk 2.

2.

3.

## Midpoint Circle Algorithm

4.

Determine symmetry points on the other seven octants. Move each calculated pixel position (x, y) onto the circular path centered on (xc, yc) and plot the coordinate values: x = x + xc , y = y + yc Repeat steps 3 though 5 until x y. For all points, add the center point (xc, yc )

5.

6.

7.

## Midpoint Circle Algorithm

Now we drew a part from circle, to draw a complete circle, we must plot the other points. We have (xc + x , yc + y), the other points are: (xc - x , yc + y) (xc + x , yc - y) (xc - x , yc - y) (xc + y , yc + x) (xc - y , yc + x) (xc + y , yc - x) (xc - y , yc - x)

## Midpoint Circle Algorithm

Given a circle radius r = 10, demonstrate the midpoint circle algorithm by determining positions along the circle octant in the first quadrant from x = 0 to x = y. Solution: p0 =1 r = 9 Plot the initial point (x0, y0 ) = (0, 10), 2x0 = 0 and 2y0 =20. Successive decision parameter values and positions along the circle path are calculated using the midpoint method as appear in the next table:

## Midpoint Circle Algorithm

K 0 1 2 3 4 5 6 Pk 9 6 1 6 3 8 5 (xk+1, yk+1) (1, 10) (2, 10) (3, 10) (4, 9) (5, 9) (6,8) (7,7) 2 xk+1 2 4 6 8 10 12 14 2 yk+1 20 20 20 18 18 16 14

## Ellipse Generating Algorithms

Ellipse an elongated circle. A modified circle whose radius varies from a maximum value in one direction to a minimum value in the perpendicular direction. A precise definition in terms of distance from any point on the ellipse to two fixed position, called the foci of the ellipse. The sum of these two distances is the same value for all points on the ellipse.

## Ellipse Generating Algorithms

If the distance to the two foci from any point P=(x,y) on the ellipse is labeled as d1 and d2 then the general equation d1 + d2 = constant Expressing the distances in terms of the focal coordinates F1=(x1,y1) and F2=(x2,y2) we have

(xx1) +( yy1)
2

## + (xx2) +( yy2) =constant

2 2

Ellipse has two axes major and minor axes. Major axes is a straight line segment extending from one side of the ellipse to the other side through foci

## Ellipse Generating Algorithms

Minor axis spans the shorter dimensions of the ellipse bisecting the major axis at the halfway position between the two foci. we will only consider standard ellipse in terms of the ellipse center coordinates and parameters rx and ry

x xc r x

y yc + r y

=1

## Ellipse Generating Algorithms

An ellipse only has a 2-way symmetry Calculation of a point (x,y) in one quadrant yields the ellipse points shown for the other three quadrants Consider an ellipse centered at the origin: 2 2
x y r + =1 x ry
2 2

x y =1 + r r x y
2 2 2

## What is the discriminator function?

f e (x, y ) = ry x + rx y rx ry
2 2

## Midpoint Ellipse Algorithms

We define the Ellipse function as

f e ( x, y ) = ry x + rx y rx ry
2 2 2 2 2

It has the following properties: fe(x,y) < 0 for a point inside the ellipse fe(x,y) > 0 for a point outside the ellipse fe(x,y) = 0 for a point on the ellipse The ellipse function fe(x,y) serves as the decision parameter in the midpoint algorithm.. At each sampling position select the next pixel along the ellipse path according to the sign of the ellipse function.

## Ellipse Generating Algorithms

Ellipse is different from circle. Similar approach with circle, different is sampling direction. The midpoint ellipse method is applied throughout the first quadrant in two parts. The division of the first quadrant according to the slope of an ellipse with rx<ry Region 1: Sampling is at x direction Choose between (xk+1, yk), or (xk+1, yk-1) Move out if 2r2yx >= 2r2xy Region 2: Sampling is at y direction Choose between (xk, yk-1), or (xk+1, yk-1)

## Midpoint Ellipse Algorithms ( Decision parameters)

Region 1:

p1k = f e ( xk + 1, yk 1 2 )
midpoint is inside choose pixel (xk+1, yk) midpoint is outside choose pixel (xk+1, yk-1)

ve +ve

## Midpoint Ellipse Algorithms

Region 2

p 2 k = f e (xk + 1 2 , yk 1)
midpoint is inside choose pixel (xk+1, yk-1) midpoint is outside choose pixel (xk, yk-1)

ve

+ve

## Midpoint Ellipse Algorithms

1.

Input rx, ry and ellipse center (xc, yc). First point on the similar ellipse centered at the origin is (0, ry).

( x0 , y0 ) = (0, ry )
2.

## Initial value for decision parameter at region 1:

p10=fellipse(1,ry-1/2) =r2y-r2x(ry-1/2)2-r2xr2y

p 1 0 = r y rx r y +
2 2

1 4

rx

## Midpoint Ellipse Algorithms

3.

At each xk in region 1, starting from k = 0, test p1k : If p1k < 0, next point (xk+1, yk) and

2 2

2 2 2

With 2r2yxk+1

= 2r2yxk + 2r2y,

## 2r2xyk+1 = 2r2xyk 2r2x

Determine symmetry points in the other 3 octants. Get the actual point for ellipse centered at (xc, yc) that is (x + xc, y + yc).

## Midpoint Ellipse Algorithms

4.

Repeat step 3 - 6 until 2ry2x 2rx2y. Initial value for decision parameter in region 2:

5.

p 20 = ry

2 2 2 2 2 ( x0 + 1 ) ( ) + rx y0 1 rx ry 2

6. At each yk in region 2, starting from k = 0, test p2k:If p2k > 0, next point is (xk, yk-1) and

p 2 k +1 = p 2 k 2rx2 yk +1 + rx2

## Midpoint Ellipse Algorithms

else, next point is (xk+1, yk-1) and

## p 2 k +1 = p 2 k + 2 ry2 x k +1 2 rx2 y k +1 + rx2

9. 10.

Determine symmetry points in the other 3 octants. Get the actual point for ellipse centered at (xc, yc) that is (x + xc, y + yc). Repeat step 8 - 10 until y = 0.

11.

## Midpoint Ellipse Algorithms

inline int round (const float a) { return int (a + 0.5); } /* The following procedure accepts values for an ellipse * center position and its semimajor and semiminor axes, then * calculates ellipse positions using the midpoint algorithm. */ void ellipseMidpoint (int xCenter, int yCenter, int Rx, int Ry) { int Rx2 = Rx * Rx; int Ry2 = Ry * Ry; int twoRx2 = 2 * Rx2; int twoRy2 = 2 * Ry2; int p; int x = 0; int y = Ry; int px = 0; int py = twoRx2 * y; void ellipsePlotPoints (int, int, int, int);

## Midpoint Ellipse Algorithms

/* Region 1 */ p = round (Ry2 - (Rx2 * Ry) + (0.25 * Rx2)); while (px < py) { x++; px += twoRy2; if (p < 0) p += Ry2 + px; else { y--; py -= twoRx2; p += Ry2 + px - py; } ellipsePlotPoints (xCenter, yCenter, x, y); }

## Midpoint Ellipse Algorithms

/* Region 2 */ p = round (Ry2 * (x+0.5) * (x+0.5) + Rx2 * (y-1) * (y-1) - Rx2 * Ry2); while (y > 0) { y--; py -= twoRx2; if (p > 0) p += Rx2 - py; else { x++; px += twoRy2; p += Rx2 - py + px; } ellipsePlotPoints (xCenter, yCenter, x, y); } }

## Midpoint Ellipse Algorithms

void ellipsePlotPoints (int xCenter, int yCenter, int x, int y); { setPixel (xCenter + x, yCenter + y); setPixel (xCenter - x, yCenter + y); setPixel (xCenter + x, yCenter - y); setPixel (xCenter - x, yCenter - y); }

Thank you
{"found_math": false, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 0, "mathjax_display_tex": 0, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0, "katex": 0, "math-container": 0, "wp-katex-eq": 0, "align": 0, "equation": 0, "x-ck12": 0, "texerror": 0}