# Equation of circle when three points on the circle are given

Given three coordinates that lie on a circle, (x1, y1), (x2, y2) and (x3, y3). The task is to find the equation of the circle and then print the center and the radius of the circle.
Equation of circle in general form is x² + y² + 2gx + 2fy + c = 0 and in radius form is (x – h)² + (y -k)² = r², where (h, k) is the center of the circle and r is the radius.

Examples:

Input: x1 = 1, y1 = 0, x2 = -1, y2 = 0, x3 = 0, y3 = 1
Output:
Centre = (0, 0)
The equation of the circle is x2 + y2 = 1.

Input: x1 = 1, y1 = -6, x2 = 2, y2 = 1, x3 = 5, y3 = 2
Output:
Centre = (5, -3)
Equation of the circle is x2 + y2 -10x + 6y + 9 = 0

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: As we know all three point lie on the circle so they will satisfy the equation of circle and putting them in general equation we get three equation with three variable g, f and c and by further solving we can get the values. We can derive the formula to obtain the value of g, f and c as:

Putting coordinates in eqn of circle, we get:
x12 + y12 + 2gx1 + 2fy1 + c = 0 – (1)
x22 + y22 + 2gx2 + 2fy2 + c = 0 – (2)
x32 + y32 + 2gx3 + 2fy3 + c = 0 – (3)

From (1) we get, 2gx1 = -x12 – y12 – 2fy1 – c – (4)
From (1) we get, c = -x12 – y12 – 2gx1 – 2fy1 – (5)
From (3) we get, 2fy3 = -x32 – y32 – 2gx3 – c – (6)

Subtracting eqn (2) from eqn (1) we get,
2g( x1 – x2 ) = ( x22 -x12 ) + ( y22 – y12 ) + 2f( y2 – y1 ) – (A)

Now putting eqn (5) in (6) we get,
2fy3 = -x32 – y32 – 2gx3 + x12 + y12 + 2gx1 + 2fy1 – (7)

Now putting value of 2g from eqn (A) in (7) we get,
2f = ( ( x12 – x32 )( x1 – x2 ) +( y12 – y32 )( x1 – x2 ) + ( x22 – x12 )( x1 – x3 ) + ( y22 – y12 )( x1 – x3 ) ) / ( y3 – y1 )( x1 – x2 ) – ( y2 – y1 )( x1 – x3 )

Similarly we can obtain the values of 2g :
2g = ( ( x12 – x32 )( y1 – x2 ) +( y12 – y32 )( y1 – y2 ) + ( x22 – x12 )( y1 – y3) + ( y22 – y12 )( y1 – y3 ) ) / ( y3 -y1 )( y1 – y2 ) – ( x2 – x1 )( y1 – y3 )

Putting 2g and 2f in eqn (5) we get the value of c and know we had the equation of circle as x2 + y2 + 2gx + 2fy + c = 0

Below is the implementation of the above approach:

 `// C++ implementation of the approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to find the circle on ` `// which the given three points lie ` `void` `findCircle(``int` `x1, ``int` `y1, ``int` `x2, ``int` `y2, ``int` `x3, ``int` `y3) ` `{ ` `    ``int` `x12 = x1 - x2; ` `    ``int` `x13 = x1 - x3; ` ` `  `    ``int` `y12 = y1 - y2; ` `    ``int` `y13 = y1 - y3; ` ` `  `    ``int` `y31 = y3 - y1; ` `    ``int` `y21 = y2 - y1; ` ` `  `    ``int` `x31 = x3 - x1; ` `    ``int` `x21 = x2 - x1; ` ` `  `    ``// x1^2 - x3^2 ` `    ``int` `sx13 = ``pow``(x1, 2) - ``pow``(x3, 2); ` ` `  `    ``// y1^2 - y3^2 ` `    ``int` `sy13 = ``pow``(y1, 2) - ``pow``(y3, 2); ` ` `  `    ``int` `sx21 = ``pow``(x2, 2) - ``pow``(x1, 2); ` `    ``int` `sy21 = ``pow``(y2, 2) - ``pow``(y1, 2); ` ` `  `    ``int` `f = ((sx13) * (x12) ` `             ``+ (sy13) * (x12) ` `             ``+ (sx21) * (x13) ` `             ``+ (sy21) * (x13)) ` `            ``/ (2 * ((y31) * (x12) - (y21) * (x13))); ` `    ``int` `g = ((sx13) * (y12) ` `             ``+ (sy13) * (y12) ` `             ``+ (sx21) * (y13) ` `             ``+ (sy21) * (y13)) ` `            ``/ (2 * ((x31) * (y12) - (x21) * (y13))); ` ` `  `    ``int` `c = -``pow``(x1, 2) - ``pow``(y1, 2) - 2 * g * x1 - 2 * f * y1; ` ` `  `    ``// eqn of circle be x^2 + y^2 + 2*g*x + 2*f*y + c = 0 ` `    ``// where centre is (h = -g, k = -f) and radius r ` `    ``// as r^2 = h^2 + k^2 - c ` `    ``int` `h = -g; ` `    ``int` `k = -f; ` `    ``int` `sqr_of_r = h * h + k * k - c; ` ` `  `    ``// r is the radius ` `    ``float` `r = ``sqrt``(sqr_of_r); ` ` `  `    ``cout << ``"Centre = ("` `<< h << ``", "` `<< k << ``")"` `<< endl; ` `    ``cout << ``"Radius = "` `<< r; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `x1 = 1, y1 = 1; ` `    ``int` `x2 = 2, y2 = 4; ` `    ``int` `x3 = 5, y3 = 3; ` `    ``findCircle(x1, y1, x2, y2, x3, y3); ` ` `  `    ``return` `0; ` `} `

 `// Java implementation of the approach ` `import` `java.text.*; ` ` `  `class` `GFG ` `{ ` `     `  `// Function to find the circle on ` `// which the given three points lie ` `static` `void` `findCircle(``int` `x1, ``int` `y1,  ` `                        ``int` `x2, ``int` `y2,  ` `                        ``int` `x3, ``int` `y3) ` `{ ` `    ``int` `x12 = x1 - x2; ` `    ``int` `x13 = x1 - x3; ` ` `  `    ``int` `y12 = y1 - y2; ` `    ``int` `y13 = y1 - y3; ` ` `  `    ``int` `y31 = y3 - y1; ` `    ``int` `y21 = y2 - y1; ` ` `  `    ``int` `x31 = x3 - x1; ` `    ``int` `x21 = x2 - x1; ` ` `  `    ``// x1^2 - x3^2 ` `    ``int` `sx13 = (``int``)(Math.pow(x1, ``2``) - ` `                    ``Math.pow(x3, ``2``)); ` ` `  `    ``// y1^2 - y3^2 ` `    ``int` `sy13 = (``int``)(Math.pow(y1, ``2``) - ` `                    ``Math.pow(y3, ``2``)); ` ` `  `    ``int` `sx21 = (``int``)(Math.pow(x2, ``2``) - ` `                    ``Math.pow(x1, ``2``)); ` `                     `  `    ``int` `sy21 = (``int``)(Math.pow(y2, ``2``) - ` `                    ``Math.pow(y1, ``2``)); ` ` `  `    ``int` `f = ((sx13) * (x12) ` `            ``+ (sy13) * (x12) ` `            ``+ (sx21) * (x13) ` `            ``+ (sy21) * (x13)) ` `            ``/ (``2` `* ((y31) * (x12) - (y21) * (x13))); ` `    ``int` `g = ((sx13) * (y12) ` `            ``+ (sy13) * (y12) ` `            ``+ (sx21) * (y13) ` `            ``+ (sy21) * (y13)) ` `            ``/ (``2` `* ((x31) * (y12) - (x21) * (y13))); ` ` `  `    ``int` `c = -(``int``)Math.pow(x1, ``2``) - (``int``)Math.pow(y1, ``2``) - ` `                                ``2` `* g * x1 - ``2` `* f * y1; ` ` `  `    ``// eqn of circle be x^2 + y^2 + 2*g*x + 2*f*y + c = 0 ` `    ``// where centre is (h = -g, k = -f) and radius r ` `    ``// as r^2 = h^2 + k^2 - c ` `    ``int` `h = -g; ` `    ``int` `k = -f; ` `    ``int` `sqr_of_r = h * h + k * k - c; ` ` `  `    ``// r is the radius ` `    ``double` `r = Math.sqrt(sqr_of_r); ` `    ``DecimalFormat df = ``new` `DecimalFormat(``"#.#####"``); ` `    ``System.out.println(``"Centre = ("` `+ h + ``","` `+ k + ``")"``); ` `    ``System.out.println(``"Radius = "` `+ df.format(r)); ` `} ` ` `  `// Driver code ` `public` `static` `void` `main (String[] args) ` `{ ` `    ``int` `x1 = ``1``, y1 = ``1``; ` `    ``int` `x2 = ``2``, y2 = ``4``; ` `    ``int` `x3 = ``5``, y3 = ``3``; ` `    ``findCircle(x1, y1, x2, y2, x3, y3); ` `} ` `} ` ` `  `// This code is contributed by chandan_jnu `

 `# Python3 implementation of the approach  ` `from` `math ``import` `sqrt ` ` `  `# Function to find the circle on  ` `# which the given three points lie  ` `def` `findCircle(x1, y1, x2, y2, x3, y3) : ` `    ``x12 ``=` `x1 ``-` `x2;  ` `    ``x13 ``=` `x1 ``-` `x3;  ` ` `  `    ``y12 ``=` `y1 ``-` `y2;  ` `    ``y13 ``=` `y1 ``-` `y3;  ` ` `  `    ``y31 ``=` `y3 ``-` `y1;  ` `    ``y21 ``=` `y2 ``-` `y1;  ` ` `  `    ``x31 ``=` `x3 ``-` `x1;  ` `    ``x21 ``=` `x2 ``-` `x1;  ` ` `  `    ``# x1^2 - x3^2  ` `    ``sx13 ``=` `pow``(x1, ``2``) ``-` `pow``(x3, ``2``);  ` ` `  `    ``# y1^2 - y3^2  ` `    ``sy13 ``=` `pow``(y1, ``2``) ``-` `pow``(y3, ``2``);  ` ` `  `    ``sx21 ``=` `pow``(x2, ``2``) ``-` `pow``(x1, ``2``);  ` `    ``sy21 ``=` `pow``(y2, ``2``) ``-` `pow``(y1, ``2``);  ` ` `  `    ``f ``=` `(((sx13) ``*` `(x12) ``+` `(sy13) ``*`  `          ``(x12) ``+` `(sx21) ``*` `(x13) ``+`  `          ``(sy21) ``*` `(x13)) ``/``/` `(``2` `*`  `          ``((y31) ``*` `(x12) ``-` `(y21) ``*` `(x13)))); ` `             `  `    ``g ``=` `(((sx13) ``*` `(y12) ``+` `(sy13) ``*` `(y12) ``+`  `          ``(sx21) ``*` `(y13) ``+` `(sy21) ``*` `(y13)) ``/``/`  `          ``(``2` `*` `((x31) ``*` `(y12) ``-` `(x21) ``*` `(y13))));  ` ` `  `    ``c ``=` `(``-``pow``(x1, ``2``) ``-` `pow``(y1, ``2``) ``-`  `         ``2` `*` `g ``*` `x1 ``-` `2` `*` `f ``*` `y1);  ` ` `  `    ``# eqn of circle be x^2 + y^2 + 2*g*x + 2*f*y + c = 0  ` `    ``# where centre is (h = -g, k = -f) and  ` `    ``# radius r as r^2 = h^2 + k^2 - c  ` `    ``h ``=` `-``g;  ` `    ``k ``=` `-``f;  ` `    ``sqr_of_r ``=` `h ``*` `h ``+` `k ``*` `k ``-` `c;  ` ` `  `    ``# r is the radius  ` `    ``r ``=` `round``(sqrt(sqr_of_r), ``5``);  ` ` `  `    ``print``(``"Centre = ("``, h, ``", "``, k, ``")"``);  ` `    ``print``(``"Radius = "``, r);  ` ` `  `# Driver code  ` `if` `__name__ ``=``=` `"__main__"` `:  ` `     `  `    ``x1 ``=` `1` `; y1 ``=` `1``;  ` `    ``x2 ``=` `2` `; y2 ``=` `4``;  ` `    ``x3 ``=` `5` `; y3 ``=` `3``;  ` `    ``findCircle(x1, y1, x2, y2, x3, y3);  ` ` `  `# This code is contributed by Ryuga `

 `// C# implementation of the approach ` `using` `System; ` ` `  `class` `GFG ` `{ ` `     `  `// Function to find the circle on ` `// which the given three points lie ` `static` `void` `findCircle(``int` `x1, ``int` `y1,  ` `                        ``int` `x2, ``int` `y2,  ` `                        ``int` `x3, ``int` `y3) ` `{ ` `    ``int` `x12 = x1 - x2; ` `    ``int` `x13 = x1 - x3; ` ` `  `    ``int` `y12 = y1 - y2; ` `    ``int` `y13 = y1 - y3; ` ` `  `    ``int` `y31 = y3 - y1; ` `    ``int` `y21 = y2 - y1; ` ` `  `    ``int` `x31 = x3 - x1; ` `    ``int` `x21 = x2 - x1; ` ` `  `    ``// x1^2 - x3^2 ` `    ``int` `sx13 = (``int``)(Math.Pow(x1, 2) - ` `                    ``Math.Pow(x3, 2)); ` ` `  `    ``// y1^2 - y3^2 ` `    ``int` `sy13 = (``int``)(Math.Pow(y1, 2) - ` `                    ``Math.Pow(y3, 2)); ` ` `  `    ``int` `sx21 = (``int``)(Math.Pow(x2, 2) - ` `                    ``Math.Pow(x1, 2)); ` `                     `  `    ``int` `sy21 = (``int``)(Math.Pow(y2, 2) - ` `                    ``Math.Pow(y1, 2)); ` ` `  `    ``int` `f = ((sx13) * (x12) ` `            ``+ (sy13) * (x12) ` `            ``+ (sx21) * (x13) ` `            ``+ (sy21) * (x13)) ` `            ``/ (2 * ((y31) * (x12) - (y21) * (x13))); ` `    ``int` `g = ((sx13) * (y12) ` `            ``+ (sy13) * (y12) ` `            ``+ (sx21) * (y13) ` `            ``+ (sy21) * (y13)) ` `            ``/ (2 * ((x31) * (y12) - (x21) * (y13))); ` ` `  `    ``int` `c = -(``int``)Math.Pow(x1, 2) - (``int``)Math.Pow(y1, 2) - ` `                                ``2 * g * x1 - 2 * f * y1; ` ` `  `    ``// eqn of circle be x^2 + y^2 + 2*g*x + 2*f*y + c = 0 ` `    ``// where centre is (h = -g, k = -f) and radius r ` `    ``// as r^2 = h^2 + k^2 - c ` `    ``int` `h = -g; ` `    ``int` `k = -f; ` `    ``int` `sqr_of_r = h * h + k * k - c; ` ` `  `    ``// r is the radius ` `    ``double` `r = Math.Round(Math.Sqrt(sqr_of_r), 5); ` ` `  `    ``Console.WriteLine(``"Centre = ("` `+ h + ``","` `+ k + ``")"``); ` `    ``Console.WriteLine(``"Radius = "` `+ r); ` `} ` ` `  `// Driver code ` `static` `void` `Main() ` `{ ` `    ``int` `x1 = 1, y1 = 1; ` `    ``int` `x2 = 2, y2 = 4; ` `    ``int` `x3 = 5, y3 = 3; ` `    ``findCircle(x1, y1, x2, y2, x3, y3); ` `} ` `} ` ` `  `// This code is contributed by chandan_jnu `

Output:
```Centre = (3, 2)