Given a center of a circle and its radius. our task is to find the neighbors of any point on the discrete circle.
Input : Center = (0, 0), Radius = 3 Point for determining neighbors = (2, 2) Output : Neighbors of given point are : (1, 3), (3, 1) Input : Center = (2, 2) Radius 2 Point of determining neighbors = (0, 2) Output : Neighbors of given point are : (1, 4), (3, 4)
The neighbours of any point on the discrete circle are those points which are having one less or one more x coordinate from its original x coordinate.
We use bresenham’s circle generation algorithm to extract out integer points required to draw a circle on computer screen of pixels.
Circle have the property of being highly symmetrical which is needed when it comes to drawing them on the computer screen of pixels. Bresenham’s circle algorithm calculates the locations of the pixels in the first 45 degrees and remaining pixels on the periphery of a circle which is centered at origin are computed by using 8-way symmetry property of the circle.
Derivation: Consider an infinitesimally small continuous arc of a circle as shown in the figure below, Let’s suppose that we want to move along a clockwise circular arc with center at the origin, with radius r and our motion lies in the first octant lies in first octant, so our limits are from (0, r) to (r/, r/) where x = y. as we know that, In this particular octant, the decrease in the y coordinate is less than increase in the x coordinate or you can say that the movement along x axis is more than the movement along y axis so, the x coordinate always increases in first octant. now, we want to know whether the y will change with x or not. In order to know the variation of y with x, bresenham’s introduced a variable named as decision parameter which will update their value as the loop runs.
Now, we need to understand that how we will choose the next pixel, In the figure, f(N) and f(S) are errors involved in calculating the distances from origin to pixel N and S respectively and whichever is comes out to be less we’ll choose that pixel. decision parameter is defined as d = f(N)+f(S), if d <= 0 then N will be the next pixel otherwise S will be the next pixel. we will keep doing this procedure until x<y condition holds and by taking all symmetric points we will end up with all the integer points required to show a circle on computer screen of pixels.
This article is not predominantly focused on bresenham's algorithm therefore, I'll skip the derivation of decision parameter but if you want to understand of derivation of decision parameter then go to the reference links.
Note: neighbors of a point can be of any number and y-coordinate of the neighbors should have same sign as of its input pixel and for those pixels which have y coordinate zero we will print out all the neighbors irrespective of its signs.
A discrete geometric object consists of a finite set of integer points. This set is usually very sparse. Therefore, an array representation is not at all space efficient to store. we will use hash map having data value is a linked list of y-coordinate and key value as x- coordinate. we can easily access them using the key value and its also a space efficient.
Below is C++ stl program for determining Neighbors of a given point.
(-3, 0), (-3, -1), (-3, 1), (-2, -2), (-2, 2), (-1, -3), (-1, 3), (0, 3) (0, -3), (1, 3), (1, -3), (2, 2), (2, -2), (3, 0), (3, 1), (3, -1) Neighbours of given point are : (2, 2), (2, -2)
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.