# Midpoint Circle Algorithm

In this article, we are going to learn about **circle generating algorithms in computer graphics** i.e. **Midpoint circle algorithm**. Derivation of generating midpoint circle algorithm is also prescribed in this article.

Submitted by Abhishek Kataria, on August 04, 2018

## Midpoint circle Algorithm

This is an algorithm which is used to calculate the entire perimeter points of a circle in a first octant so that the points of the other octant can be taken easily as they are mirror points; this is due to circle property as it is symmetric about its center.

In this algorithm decision parameter is based on a circle equation. As we know that the equation of a circle is x^{2} +y^{2} =r^{2} when the centre is (0, 0).

Now let us define the function of a circle i.e.: **fcircle(x,y)= x ^{2} +y^{2} - r^{2} **

- If
**fcircle < 0**then**x**,**y**is inside the circle boundary. - If
**fcircle > 0**then**x**,**y**is outside the circle boundary. - If
**fcircle = 0**then**x**,**y**is on the circle boundary.

### Decision parameter

**p _{k} =fcircle(x_{k+1},y_{k-1/2})** where

**p**is a decision parameter and in this

_{k}**½**is taken because it is a midpoint value through which it is easy to calculate value of

**y**and

_{k}**y**.

_{k-1}I.e. **p _{k}= (x_{k+1})^{2}+ (y_{k-1/2})^{2}-r^{2}**

If **p _{k} <0** then midpoint is inside the circle in this condition we select

**y**is

**y**otherwise we will select next

_{k}**y**as

**y**for the condition of

_{k-1}**p**.

_{k}> 0### Conclusion

- If
**p**then_{k}< 0**y**, by this the plotting points will be_{k+1}=y_{k}**( x**. By this the value for the next point will be given as:_{k+1},y_{k})**P**_{k+1}=p_{k}+2(x_{k+1}) +1 - If
**p**then_{k}> 0**y**, by this the plotting points will be_{k+1}=y_{k-1}**(x**. By this the value of the next point will be given as:_{k+1}, y_{k-1})**P**_{k+1}=p_{k}+2(x_{k+1}) +1-2(y_{k+1})

### Initial decision parameter

**P _{0} = fcircle (1, r-1/2)**

This is taken because of **(x _{0}, y_{0}) = (0, r)**

i.e. **p _{0} =5/4-r or 1-r**, (

**1-r**will be taken if

**r**is integer)

### ALGORITHM

- In this the input radius
**r**is there with a centre**(x**. To obtain the first point_{c}, y_{c})**m**the circumference of a circle is centered on the origin as**(x**._{0},y_{0}) = (0,r) - Calculate the initial decision parameters which are:
**p**_{0}=5/4-r or 1-r - Now at each
**x**position starting_{k}**k=0**, perform the following task.

if**p**then plotting point will be_{k}< 0**( x**and_{k+1},y_{k})**P**_{k+1}=p_{k}+2(x_{k+1}) +1

else the next point along the circle is (x_{k+1}, y_{k-1}) and**P**_{k+1}=p_{k}+2(x_{k+1}) +1-2(y_{k+1}) - Determine the symmetry points in the other quadrants.
- Now move at each point by the given centre that is:
**x=x+x**_{c}**y=y+y**_{c} - At last repeat steps from 3 to 5 until the condition
**x>=y**.

TOP Interview Coding Problems/Challenges

- Run-length encoding (find/print frequency of letters in a string)
- Sort an array of 0's, 1's and 2's in linear time complexity
- Checking Anagrams (check whether two string is anagrams or not)
- Relative sorting algorithm
- Finding subarray with given sum
- Find the level in a binary tree with given sum K
- Check whether a Binary Tree is BST (Binary Search Tree) or not
- 1[0]1 Pattern Count
- Capitalize first and last letter of each word in a line
- Print vertical sum of a binary tree
- Print Boundary Sum of a Binary Tree
- Reverse a single linked list
- Greedy Strategy to solve major algorithm problems
- Job sequencing problem
- Root to leaf Path Sum
- Exit Point in a Matrix
- Find length of loop in a linked list
- Toppers of Class
- Print All Nodes that don't have Sibling
- Transform to Sum Tree
- Shortest Source to Destination Path

Comments and Discussions