Draw Circle of Radius 12

The mid-point circle cartoon algorithm is an algorithm used to determine the points needed for rasterizing a circle.

We use the mid-point algorithm to calculate all the perimeter points of the circle in the first octant and so print them along with their mirror points in the other octants. This will piece of work because a circle is symmetric virtually its centre.

Circle octants

The algorithm is very similar to the Mid-Bespeak Line Generation Algorithm. Here, only the purlieus condition is dissimilar.

For whatsoever given pixel (x, y), the adjacent pixel to be plotted is either (x, y+1) or (10-i, y+1). This can be decided by following the steps below.

  1. Find the mid-point p of the ii possible pixels i.e (x-0.5, y+1)
  2. If p lies inside or on the circle perimeter, we plot the pixel (x, y+ane), otherwise if information technology's outside we plot the pixel (x-1, y+1)

Boundary Condition : Whether the mid-signal lies inside or outside the circle can be decided past using the formula:-

Given a circumvolve centered at (0,0) and radius r and a signal p(x,y)
F(p) = ten2 + y2 – r2
if F(p)<0, the indicate is within the circle
F(p)=0, the point is on the perimeter
F(p)>0, the point is exterior the circle

example

In our program, we denote F(p) with P. The value of P is calculated at the mid-betoken of the two contending pixels i.e. (x-0.five, y+1). Each pixel is described with a subscript k.

Pm = (Xk — 0.v)2 + (ythou + 1)two – r2
Now,
tenk+ane = xk or xk-one , ychiliad+1= yk +1
∴ Pk+1 = (xyard+1 – 0.five)ii + (ym+ane +1)2 – r2
= (tenk+i – 0.5)2 + [(yone thousand +1) + ane]2 – r2
= (xk+1 – 0.5)2 + (yk +i)2 + 2(ygrand + 1) + 1 – r2
= (tenyard+1 – 0.5)2 + [ – (xk – 0.5)ii +(xyard – 0.5)ii ] + (ythousand + i)ii – r2 + 2(ygrand + 1) + 1
= Pyard + (tenk+i – 0.five)2 – (10k – 0.five)2 + two(yk + i) + ane
= Pyard + (x2 one thousand+1 – xtwo k) – (xk+1 – 10k) + 2(y1000 + 1) + ane
= Pk + 2(ychiliad +1) + i, when Pg <=0 i.eastward the midpoint is within the circle
(xk+1 = tengrand)
Pthou + two(ygrand +one) – 2(10yard – 1) + 1, when Pk>0 I.e the mid signal is outside the circumvolve(xm+one = xgrand-i)

The get-go point to be plotted is (r, 0) on the ten-axis. The initial value of P is calculated as follows:-

P1 = (r – 0.five)2 + (0+1)2 – r2
= 1.25 – r
= one -r (When rounded off)

Examples:

          Input :          Middle -> (0, 0), Radius -> iii          Output :          (3, 0) (3, 0) (0, 3) (0, three)          (3, ane) (-3, 1) (3, -ane) (-3, -1)          (1, 3) (-1, iii) (i, -three) (-i, -3)          (ii, 2) (-two, 2) (2, -2) (-two, -ii)

first point to be plotted

        
          Input :          Middle -> (4, 4), Radius -> 2          Output :          (six, four) (6, four) (4, 6) (4, 6)          (six, v) (ii, 5) (half dozen, three) (2, three)          (5, half dozen) (3, 6) (five, 2) (3, 2)

CPP

#include<iostream>

using namespace std;

void midPointCircleDraw( int x_centre, int y_centre, int r)

{

int 10 = r, y = 0;

cout << "(" << ten + x_centre << ", " << y + y_centre << ") " ;

if (r > 0)

{

cout << "(" << 10 + x_centre << ", " << -y + y_centre << ") " ;

cout << "(" << y + x_centre << ", " << x + y_centre << ") " ;

cout << "(" << -y + x_centre << ", " << 10 + y_centre << ")\due north" ;

}

int P = one - r;

while (x > y)

{

y++;

if (P <= 0)

P = P + two*y + 1;

else

{

ten--;

P = P + 2*y - 2*x + 1;

}

if (ten < y)

break ;

cout << "(" << x + x_centre << ", " << y + y_centre << ") " ;

cout << "(" << -x + x_centre << ", " << y + y_centre << ") " ;

cout << "(" << x + x_centre << ", " << -y + y_centre << ") " ;

cout << "(" << -x + x_centre << ", " << -y + y_centre << ")\n" ;

if (10 != y)

{

cout << "(" << y + x_centre << ", " << ten + y_centre << ") " ;

cout << "(" << -y + x_centre << ", " << 10 + y_centre << ") " ;

cout << "(" << y + x_centre << ", " << -x + y_centre << ") " ;

cout << "(" << -y + x_centre << ", " << -x + y_centre << ")\n" ;

}

}

}

int primary()

{

midPointCircleDraw(0, 0, 3);

return 0;

}

C

#include<stdio.h>

void midPointCircleDraw( int x_centre, int y_centre, int r)

{

int ten = r, y = 0;

printf ( "(%d, %d) " , 10 + x_centre, y + y_centre);

if (r > 0)

{

printf ( "(%d, %d) " , x + x_centre, -y + y_centre);

printf ( "(%d, %d) " , y + x_centre, 10 + y_centre);

printf ( "(%d, %d)\northward" , -y + x_centre, 10 + y_centre);

}

int P = 1 - r;

while (x > y)

{

y++;

if (P <= 0)

P = P + ii*y + one;

else

{

10--;

P = P + 2*y - two*ten + 1;

}

if (x < y)

break ;

printf ( "(%d, %d) " , x + x_centre, y + y_centre);

printf ( "(%d, %d) " , -x + x_centre, y + y_centre);

printf ( "(%d, %d) " , x + x_centre, -y + y_centre);

printf ( "(%d, %d)\due north" , -x + x_centre, -y + y_centre);

if (x != y)

{

printf ( "(%d, %d) " , y + x_centre, x + y_centre);

printf ( "(%d, %d) " , -y + x_centre, x + y_centre);

printf ( "(%d, %d) " , y + x_centre, -ten + y_centre);

printf ( "(%d, %d)\due north" , -y + x_centre, -x + y_centre);

}

}

}

int primary()

{

midPointCircleDraw(0, 0, 3);

return 0;

}

Java

class GFG {

static void midPointCircleDraw( int x_centre,

int y_centre, int r)

{

int ten = r, y = 0 ;

Organisation.out.print( "(" + (x + x_centre)

+ ", " + (y + y_centre) + ")" );

if (r > 0 ) {

Arrangement.out.impress( "(" + (x + x_centre)

+ ", " + (-y + y_centre) + ")" );

System.out.print( "(" + (y + x_centre)

+ ", " + (10 + y_centre) + ")" );

System.out.println( "(" + (-y + x_centre)

+ ", " + (ten + y_centre) + ")" );

}

int P = i - r;

while (x > y) {

y++;

if (P <= 0 )

P = P + two * y + 1 ;

else {

x--;

P = P + ii * y - 2 * x + 1 ;

}

if (ten < y)

interruption ;

System.out.print( "(" + (x + x_centre)

+ ", " + (y + y_centre) + ")" );

System.out.print( "(" + (-x + x_centre)

+ ", " + (y + y_centre) + ")" );

Arrangement.out.print( "(" + (x + x_centre) +

", " + (-y + y_centre) + ")" );

System.out.println( "(" + (-x + x_centre)

+ ", " + (-y + y_centre) + ")" );

if (x != y) {

System.out.print( "(" + (y + x_centre)

+ ", " + (x + y_centre) + ")" );

Organisation.out.print( "(" + (-y + x_centre)

+ ", " + (ten + y_centre) + ")" );

System.out.impress( "(" + (y + x_centre)

+ ", " + (-10 + y_centre) + ")" );

System.out.println( "(" + (-y + x_centre)

+ ", " + (-ten + y_centre) + ")" );

}

}

}

public static void main(String[] args) {

midPointCircleDraw( 0 , 0 , 3 );

}

}

Python3

def midPointCircleDraw(x_centre, y_centre, r):

x = r

y = 0

impress ( "(" , x + x_centre, ", " ,

y + y_centre, ")" ,

sep = " ", stop = " ")

if (r > 0 ) :

print ( "(" , ten + x_centre, ", " ,

- y + y_centre, ")" ,

sep = " ", finish = " ")

impress ( "(" , y + x_centre, ", " ,

x + y_centre, ")" ,

sep = " ", end = " ")

print ( "(" , - y + x_centre, ", " ,

ten + y_centre, ")" , sep = "")

P = 1 - r

while x > y:

y + = ane

if P < = 0 :

P = P + 2 * y + 1

else :

x - = 1

P = P + 2 * y - 2 * x + ane

if (10 < y):

pause

print ( "(" , ten + x_centre, ", " , y + y_centre,

")" , sep = " ", end = " ")

print ( "(" , - x + x_centre, ", " , y + y_centre,

")" , sep = " ", stop = " ")

print ( "(" , x + x_centre, ", " , - y + y_centre,

")" , sep = " ", stop = " ")

print ( "(" , - x + x_centre, ", " , - y + y_centre,

")" , sep = "")

if x ! = y:

impress ( "(" , y + x_centre, ", " , x + y_centre,

")" , sep = " ", end = " ")

print ( "(" , - y + x_centre, ", " , x + y_centre,

")" , sep = " ", end = " ")

print ( "(" , y + x_centre, ", " , - 10 + y_centre,

")" , sep = " ", finish = " ")

print ( "(" , - y + x_centre, ", " , - ten + y_centre,

")" , sep = "")

if __name__ = = '__main__' :

midPointCircleDraw( 0 , 0 , 3 )

C#

using System;

class GFG {

static void midPointCircleDraw( int x_centre,

int y_centre, int r)

{

int x = r, y = 0;

Panel.Write( "(" + (x + x_centre)

+ ", " + (y + y_centre) + ")" );

if (r > 0)

{

Console.Write( "(" + (10 + x_centre)

+ ", " + (-y + y_centre) + ")" );

Console.Write( "(" + (y + x_centre)

+ ", " + (ten + y_centre) + ")" );

Panel.WriteLine( "(" + (-y + x_centre)

+ ", " + (x + y_centre) + ")" );

}

int P = 1 - r;

while (x > y)

{

y++;

if (P <= 0)

P = P + 2 * y + i;

else

{

x--;

P = P + 2 * y - two * x + i;

}

if (x < y)

break ;

Console.Write( "(" + (ten + x_centre)

+ ", " + (y + y_centre) + ")" );

Console.Write( "(" + (-x + x_centre)

+ ", " + (y + y_centre) + ")" );

Console.Write( "(" + (x + x_centre) +

", " + (-y + y_centre) + ")" );

Console.WriteLine( "(" + (-ten + x_centre)

+ ", " + (-y + y_centre) + ")" );

if (ten != y)

{

Console.Write( "(" + (y + x_centre)

+ ", " + (ten + y_centre) + ")" );

Console.Write( "(" + (-y + x_centre)

+ ", " + (10 + y_centre) + ")" );

Console.Write( "(" + (y + x_centre)

+ ", " + (-x + y_centre) + ")" );

Console.WriteLine( "(" + (-y + x_centre)

+ ", " + (-x + y_centre) + ")" );

}

}

}

public static void Main()

{

midPointCircleDraw(0, 0, 3);

}

}

PHP

<?php

function midPointCircleDraw( $x_centre ,

$y_centre ,

$r )

{

$x = $r ;

$y = 0;

echo "(" , $x + $x_centre , "," , $y + $y_centre , ")" ;

if ( $r > 0)

{

echo "(" , $x + $x_centre , "," , - $y + $y_centre , ")" ;

echo "(" , $y + $x_centre , "," , $x + $y_centre , ")" ;

repeat "(" ,- $y + $x_centre , "," , $ten + $y_centre , ")" , "\n" ;

}

$P = one - $r ;

while ( $ten > $y )

{

$y ++;

if ( $P <= 0)

$P = $P + two * $y + 1;

else

{

$x --;

$P = $P + 2 * $y -

2 * $x + 1;

}

if ( $x < $y )

break ;

echo "(" , $ten + $x_centre , "," , $y + $y_centre , ")" ;

echo "(" ,- $10 + $x_centre , "," , $y + $y_centre , ")" ;

repeat "(" , $x + $x_centre , "," , - $y + $y_centre , ")" ;

repeat "(" ,- $10 + $x_centre , "," , - $y + $y_centre , ")" , "\due north" ;

if ( $x != $y )

{

repeat "(" , $y + $x_centre , "," , $x + $y_centre , ")" ;

echo "(" ,- $y + $x_centre , "," , $10 + $y_centre , ")" ;

repeat "(" , $y + $x_centre , "," , - $x + $y_centre , ")" ;

echo "(" ,- $y + $x_centre , "," , - $ten + $y_centre , ")" , "\northward" ;

}

}

}

midPointCircleDraw(0, 0, 3);

?>

Javascript

<script>

function midPointCircleDraw(x_centre , y_centre , r) {

var x = r, y = 0;

document.write( "(" + (10 + x_centre) + ", " + (y + y_centre) + ")" );

if (r > 0) {

document.write( "(" + (x + x_centre) + ", " + (-y + y_centre) + ")" );

document.write( "(" + (y + x_centre) + ", " + (x + y_centre) + ")" );

document.write( "(" + (-y + x_centre) + ", " + (ten + y_centre) + ")<br/>" );

}

var P = i - r;

while (x > y) {

y++;

if (P <= 0)

P = P + two * y + 1;

else {

10--;

P = P + 2 * y - two * x + 1;

}

if (x < y)

break ;

document.write( "(" + (ten + x_centre) + ", " + (y + y_centre) + ")" );

document.write( "(" + (-ten + x_centre) + ", " + (y + y_centre) + ")" );

certificate.write( "(" + (x + x_centre) + ", " + (-y + y_centre) + ")" );

certificate.write( "(" + (-10 + x_centre) + ", " + (-y + y_centre) + ")<br/>" );

if (x != y) {

document.write( "(" + (y + x_centre) + ", " + (10 + y_centre) + ")" );

document.write( "(" + (-y + x_centre) + ", " + (x + y_centre) + ")" );

document.write( "(" + (y + x_centre) + ", " + (-x + y_centre) + ")" );

document.write( "(" + (-y + x_centre) + ", " + (-x + y_centre) + ")<br/>" );

}

}

}

midPointCircleDraw(0, 0, 3);

</script>

Output:

(3, 0) (3, 0) (0, 3) (0, 3) (3, 1) (-three, 1) (iii, -1) (-3, -1) (ane, iii) (-ane, 3) (1, -3) (-1, -3) (2, 2) (-two, 2) (2, -2) (-2, -2)

Time Complication: O(x – y)
Auxiliary Space: O(1)
References : Midpoint Circle Algorithm
Image References : Octants of a circle, Rasterised Circle, the other images were created for this article by the geek
Thank you Tuhina Singh and Teva Zanker for improving this article.
This article is contributed by Nabaneet Roy. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail service your article to review-team@geeksforgeeks.org. Run across your article appearing on the GeeksforGeeks main page and help other Geeks.
Delight write comments if yous notice anything wrong, or you want to share more information about the topic discussed above.


estesancenum.blogspot.com

Source: https://www.geeksforgeeks.org/mid-point-circle-drawing-algorithm/

0 Response to "Draw Circle of Radius 12"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel