Given three points of a regular polygon(n > 3), find the minimum area of a regular polygon (all sides same) possible with the points given.**Examples:**

Input : 0.00 0.00 1.00 1.00 0.00 1.00 Output : 1.00 By taking point (1.00, 0.00) square is formed of side 1.0 so area = 1.00 .

One thing to note in question before we proceed is that the number of sides must be at least 4 (note n > 3 condition)..

Here, we have to find the minimum area possible for a regular polygon, so to calculate the minimum possible area, we need to calculate the required value of n. As the side length is not given, so we first calculate the **circumradius of the triangle** formed by the points. It is given by the formula **R = abc / 4A**

Where a, b, c are the sides of the triangle formed and A is the area of the triangle. Here, the area of the triangle can be calculated by **Heron’s Formula**.

After calculating circumradius of the triangle, we calculate the area of the polygon by the formula **A = nX ( sin(360/n) xr ^{2} /2 )**

Here r represents the circumradius of n-gon (regular polygon of n sides).

But, first we have to calculate value of n . To calculate n we first have to calculate all the angles of triangle by the

**cosine formula**

**cosA = ( b**

^{2}+c^{2}-a^{2}) / 2bc**cosB = ( a**

^{2}+c^{2}-b^{2}) / 2ac**cosC = ( a**

^{2}+b^{2}-c^{2}) / 2abThen, n is given by

**n = pi / GCD (A , B, C )**

Where A, B and C are the angles of the triangle . After calculating n we substitute this value to the formula for calculating area of polygon .

Below is the implementation of the given approach :

## C++

`// CPP program to find minimum area of polygon of` `// number of sides more than three with given three points.` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// assigning pi value to variable` `const` `double` `pi = 3.14159265359;` `// calculating gcd value of two double values .` `double` `gcd(` `double` `x, ` `double` `y)` `{` ` ` `return` `fabs` `(y) < 1e-4 ? x : gcd(y, ` `fmod` `(x, y));` `}` `// Calculating minimum area of polygon through this function .` `double` `min_area_of_polygon(` `double` `Ax, ` `double` `Ay, ` `double` `Bx, ` ` ` `double` `By, ` `double` `Cx, ` `double` `Cy)` `{` ` ` `double` `a, b, c, Radius, Angle_A, Angle_B, Angle_C, ` ` ` `semiperimeter, n, area;` ` ` `// calculating the length of the sides of the triangle ` ` ` `// formed from given points a, b, c represents the ` ` ` `// length of different sides of triangle .` ` ` `a = ` `sqrt` `((Bx - Cx) * (Bx - Cx) + (By - Cy) * (By - Cy));` ` ` `b = ` `sqrt` `((Ax - Cx) * (Ax - Cx) + (Ay - Cy) * (Ay - Cy));` ` ` `c = ` `sqrt` `((Ax - Bx) * (Ax - Bx) + (Ay - By) * (Ay - By));` ` ` `// here we have calculated the semiperimeter of a triangle .` ` ` `semiperimeter = (a + b + c) / 2;` ` ` `// Now from the semiperimeter area of triangle is derived` ` ` `// through the heron's formula .` ` ` `double` `area_triangle = ` `sqrt` `(semiperimeter * (semiperimeter - a)` ` ` `* (semiperimeter - b)` ` ` `* (semiperimeter - c));` ` ` `// thus circumradius of the triangle is derived from the ` ` ` `// sides and area of the triangle calculated .` ` ` `Radius = (a * b * c) / (4 * area_triangle);` ` ` `// Now each angle of the triangle is derived from the sides` ` ` `// of the triangle .` ` ` `Angle_A = ` `acos` `((b * b + c * c - a * a) / (2 * b * c));` ` ` `Angle_B = ` `acos` `((a * a + c * c - b * b) / (2 * a * c));` ` ` `Angle_C = ` `acos` `((b * b + a * a - c * c) / (2 * b * a));` ` ` `// Now n is calculated such that area is minimum for` ` ` `// the regular n-gon .` ` ` `n = pi / gcd(gcd(Angle_A, Angle_B), Angle_C);` ` ` `// calculating area of regular n-gon through the circumradius` ` ` `// of the triangle .` ` ` `area = (n * Radius * Radius * ` `sin` `((2 * pi) / n)) / 2;` ` ` `return` `area;` `}` `int` `main()` `{` ` ` `// three points are given as input .` ` ` `double` `Ax, Ay, Bx, By, Cx, Cy;` ` ` `Ax = 0.00;` ` ` `Ay = 0.00;` ` ` `Bx = 1.00;` ` ` `By = 1.00;` ` ` `Cx = 0.00;` ` ` `Cy = 1.00;` ` ` `printf` `(` `"%.2f"` `, min_area_of_polygon(Ax, Ay, Bx, By, Cx, Cy));` ` ` `return` `0;` `}` |

*chevron_right*

*filter_none*

## Java

`// Java program to find minimum ` `// area of polygon of number of ` `// sides more than three with ` `// given three points. ` `class` `GFG{` `// Assigning pi value to variable ` `static` `double` `pi = ` `3.14159265359` `; ` ` ` `public` `static` `double` `fmod(` `double` `a, ` ` ` `double` `b) ` `{` ` ` `int` `result = (` `int` `) Math.floor(a / b);` ` ` `return` `a - result * b;` `}` ` ` `// calculating gcd value of ` `// two double values . ` `public` `static` `double` `gcd(` `double` `x,` ` ` `double` `y) ` `{ ` ` ` `return` `Math.abs(y) < 1e-` `4` `? x : ` ` ` `gcd(y, fmod(x, y)); ` `} ` ` ` `// Calculating minimum area of polygon through this function . ` `public` `static` `double` `min_area_of_polygon(` `double` `Ax, ` `double` `Ay, ` ` ` `double` `Bx, ` `double` `By, ` ` ` `double` `Cx, ` `double` `Cy) ` `{ ` ` ` `double` `a, b, c, Radius, Angle_A, Angle_B, Angle_C, ` ` ` `semiperimeter, n, area; ` ` ` `// Calculating the length of the sides ` ` ` `// of the triangle formed from given ` ` ` `/// points a, b, c represents the ` ` ` `// length of different sides of triangle . ` ` ` `a = Math.sqrt((Bx - Cx) * (Bx - Cx) + ` ` ` `(By - Cy) * (By - Cy)); ` ` ` `b = Math.sqrt((Ax - Cx) * (Ax - Cx) + ` ` ` `(Ay - Cy) * (Ay - Cy)); ` ` ` `c = Math.sqrt((Ax - Bx) * (Ax - Bx) + ` ` ` `(Ay - By) * (Ay - By)); ` ` ` `// Here we have calculated the ` ` ` `// semiperimeter of a triangle . ` ` ` `semiperimeter = (a + b + c) / ` `2` `; ` ` ` `// Now from the semiperimeter area ` ` ` `// of triangle is derived ` ` ` `// through the heron's formula . ` ` ` `double` `area_triangle = Math.sqrt(semiperimeter * ` ` ` `(semiperimeter - a) * ` ` ` `(semiperimeter - b) * ` ` ` `(semiperimeter - c)); ` ` ` `// Thus circumradius of the triangle ` ` ` `// is derived from the sides and ` ` ` `// area of the triangle calculated . ` ` ` `Radius = (a * b * c) / (` `4` `* area_triangle); ` ` ` `// Now each angle of the triangle ` ` ` `// is derived from the sides ` ` ` `// of the triangle . ` ` ` `Angle_A = Math.acos((b * b + c * c - a * a) / ` ` ` `(` `2` `* b * c)); ` ` ` `Angle_B = Math.acos((a * a + c * c - b * b) / ` ` ` `(` `2` `* a * c)); ` ` ` `Angle_C = Math.acos((b * b + a * a - c * c) / ` ` ` `(` `2` `* b * a)); ` ` ` `// Now n is calculated such that ` ` ` `// area is minimum for the regular n-gon . ` ` ` `n = pi / gcd(gcd(Angle_A, Angle_B), Angle_C); ` ` ` `// calculating area of regular n-gon ` ` ` `// through the circumradius of the triangle . ` ` ` `area = (n * Radius * Radius * ` ` ` `Math.sin((` `2` `* pi) / n)) / ` `2` `; ` ` ` `return` `area; ` `} ` ` ` `// Driver code` `public` `static` `void` `main(String[] args) ` `{` ` ` `// Three points are given as input . ` ` ` `double` `Ax, Ay, Bx, By, Cx, Cy; ` ` ` `Ax = ` `0.00` `; ` ` ` `Ay = ` `0.00` `; ` ` ` `Bx = ` `1.00` `; ` ` ` `By = ` `1.00` `; ` ` ` `Cx = ` `0.00` `; ` ` ` `Cy = ` `1.00` `; ` ` ` `System.out.println(String.format(` `"%.2f"` `, ` ` ` `min_area_of_polygon(Ax, Ay, ` ` ` `Bx, By, ` ` ` `Cx, Cy)));` `}` `}` `// This code is contributed by divyeshrabadiya07` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to find minimum area of ` `# polygon of number of sides more than three` `# with given three points. ` `# from math lib import every function` `from` `math ` `import` `*` `# assigning pi value to variable ` `pi ` `=` `3.14159265359` `# calculating gcd value of two double values . ` `def` `gcd(x, y) :` ` ` `if` `abs` `(y) < ` `1e` `-` `4` `:` ` ` `return` `x` ` ` `else` `:` ` ` `return` `gcd(y, fmod(x, y))` `# Calculating minimum area of polygon ` `# through this function . ` `def` `min_area_of_polygon(Ax, Ay, Bx, ` ` ` `By, Cx, Cy) :` ` ` `# calculating the length of the sides of ` ` ` `# the triangle formed from given points ` ` ` `# a, b, c represents the length of different` ` ` `# sides of triangle` ` ` `a ` `=` `sqrt((Bx ` `-` `Cx) ` `*` `(Bx ` `-` `Cx) ` `+` ` ` `(By ` `-` `Cy) ` `*` `(By ` `-` `Cy))` ` ` `b ` `=` `sqrt((Ax ` `-` `Cx) ` `*` `(Ax ` `-` `Cx) ` `+` ` ` `(Ay ` `-` `Cy) ` `*` `(Ay ` `-` `Cy))` ` ` `c ` `=` `sqrt((Ax ` `-` `Bx) ` `*` `(Ax ` `-` `Bx) ` `+` ` ` `(Ay ` `-` `By) ` `*` `(Ay ` `-` `By)) ` ` ` `# here we have calculated the semiperimeter ` ` ` `# of a triangle . ` ` ` `semiperimeter ` `=` `(a ` `+` `b ` `+` `c) ` `/` `2` ` ` `# Now from the semiperimeter area of triangle ` ` ` `# is derived through the heron's formula ` ` ` `area_triangle ` `=` `sqrt(semiperimeter ` `*` ` ` `(semiperimeter ` `-` `a) ` `*` ` ` `(semiperimeter ` `-` `b) ` `*` ` ` `(semiperimeter ` `-` `c))` ` ` `# thus circumradius of the triangle is derived ` ` ` `# from the sides and area of the triangle calculated` ` ` `Radius ` `=` `(a ` `*` `b ` `*` `c) ` `/` `(` `4` `*` `area_triangle)` ` ` `# Now each angle of the triangle is derived ` ` ` `# from the sides of the triangle` ` ` `Angle_A ` `=` `acos((b ` `*` `b ` `+` `c ` `*` `c ` `-` `a ` `*` `a) ` `/` `(` `2` `*` `b ` `*` `c))` ` ` `Angle_B ` `=` `acos((a ` `*` `a ` `+` `c ` `*` `c ` `-` `b ` `*` `b) ` `/` `(` `2` `*` `a ` `*` `c))` ` ` `Angle_C ` `=` `acos((b ` `*` `b ` `+` `a ` `*` `a ` `-` `c ` `*` `c) ` `/` `(` `2` `*` `b ` `*` `a))` ` ` `# Now n is calculated such that area is ` ` ` `# minimum for the regular n-gon ` ` ` `n ` `=` `pi ` `/` `gcd(gcd(Angle_A, Angle_B), Angle_C)` ` ` `# calculating area of regular n-gon through ` ` ` `# the circumradius of the triangle` ` ` `area ` `=` `(n ` `*` `Radius ` `*` `Radius ` `*` ` ` `sin((` `2` `*` `pi) ` `/` `n)) ` `/` `2` ` ` `return` `area` `# Driver Code` `if` `__name__ ` `=` `=` `"__main__"` `:` ` ` `# three points are given as input . ` ` ` `Ax ` `=` `0.00` ` ` `Ay ` `=` `0.00` ` ` `Bx ` `=` `1.00` ` ` `By ` `=` `1.00` ` ` `Cx ` `=` `0.00` ` ` `Cy ` `=` `1.00` ` ` `print` `(` `round` `(min_area_of_polygon(Ax, Ay, Bx, ` ` ` `By, Cx, Cy), ` `1` `))` `# This code is contributed by Ryuga ` |

*chevron_right*

*filter_none*

**Output:**

1.00

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Ways to choose three points with distance between the most distant points <= L
- Check if the given point lies inside given N points of a Convex Polygon
- Minimum number of points to be removed to get remaining points on one side of axis
- Area of a polygon with given n ordered vertices
- Area of a n-sided regular polygon with given side length
- Area of a n-sided regular polygon with given Radius
- Count of obtuse angles in a circle with 'k' equidistant points between 2 given points
- Find the point on X-axis from given N points having least Sum of Distances from all other points
- Equation of circle when three points on the circle are given
- Check whether triangle is valid or not if three points are given
- Program to find Area of Triangle inscribed in N-sided Regular Polygon
- Area of largest Circle inscribe in N-sided Regular polygon
- Number of Integral Points between Two Points
- Program to check if three points are collinear
- Find if a point lies inside, outside or on the circumcircle of three points A, B, C
- Find area of the larger circle when radius of the smaller circle and difference in the area is given
- Calculate Volume, Curved Surface Area and Total Surface Area Of Cylinder
- Minimum Cost Polygon Triangulation
- Minimum side of square embedded in Regular polygon with N sides
- Minimum Sum of Euclidean Distances to all given Points

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.