 Open in App
Not now

# Equable Shapes

• Difficulty Level : Hard
• Last Updated : 22 Jun, 2022

A shape is equable if its area is equal to its perimeter. Given ordered coordinates of polygon find whether the shape is equable or not.

Examples :

```Input : X[] = {0, 5, 0}
Y[] = {0, 0, 12}
Output : Equable Shape

Input : X[] = {0, 4, 4, 0}
Y[] = {0, 0, 4, 4}
Output : Equable Shape

Input: X[] = {0, 6, 6, 0}
Y[] = {0, 0, 4, 4}
Output: Not Equable Shape```

We can find area of polygon using shoelace formula which is described in Area of a polygon with given n ordered vertices. We can also find its perimeter simply by adding distances between adjacent points.

## C++

 `// C++ program to find equable shape` `#include ` `using` `namespace` `std;`   `// To calculate area of polygon` `double` `polygonArea(``double` `X[], ``double` `Y[], ``int` `n)` `{` `    ``double` `area = 0.0;`   `    ``// Calculate value of area using shoelace ` `    ``// formula` `    ``int` `j = n - 1;` `    ``for` `(``int` `i = 0; i < n; i++) {` `        ``area += (X[j] + X[i]) * (Y[j] - Y[i]);` `        ``j = i; ``// j is previous vertex to i` `    ``}`   `    ``return` `abs``(area / 2.0);` `}`   `// To calculate perimeter of polygon` `double` `polygonPerimeter(``double` `X[], ``double` `Y[], ` `                                         ``int` `n)` `{` `    ``double` `perimeter = 0.0;`   `    ``// Calculate value of perimeter` `    ``int` `j = n - 1;` `    ``for` `(``int` `i = 0; i < n; i++) {` `        ``perimeter += ``sqrt``((X[j] - X[i]) * (X[j] - X[i]) + ` `                          ``(Y[j] - Y[i]) * (Y[j] - Y[i]));` `        ``j = i; ``// j is previous vertex to i` `    ``}`   `    ``return` `perimeter;` `}`   `// To find equable shape` `void` `equableShape(``double` `X[], ``double` `Y[], ``int` `n)` `{` `    ``// Find area and perimeter of polygon if` `    ``// they are equal then it is equable shape` `    ``if` `(polygonPerimeter(X, Y, n) == polygonArea(X, Y, n))` `        ``cout << ``"Equable Shape"``;` `    ``else` `        ``cout << ``"Not Equable Shape"``;` `}`   `// Driver program to test above function` `int` `main()` `{` `    ``double` `X[] = { 0, 5, 0 };` `    ``double` `Y[] = { 0, 0, 12 };`   `    ``int` `n = ``sizeof``(X) / ``sizeof``(X);`   `    ``equableShape(X, Y, n);`   `    ``return` `0;` `}`

## Java

 `// Java program to find equable shape` `class` `equable {`   `    ``// To calculate area of polygon` `    ``static` `double` `polygonArea(``double` `X[], ``double` `Y[], ``int` `n)` `    ``{` `        ``double` `area = ``0.0``;`   `        ``// Calculate value of area using shoelace formula` `        ``int` `j = n - ``1``;` `        ``for` `(``int` `i = ``0``; i < n; i++) {` `            ``area += (X[j] + X[i]) * (Y[j] - Y[i]);` `            ``j = i; ``// j is previous vertex to i` `        ``}`   `        ``return` `Math.abs(area / ``2.0``);` `    ``}`   `    ``// To calculate perimeter of polygon` `    ``static` `double` `polygonPerimeter(``double` `X[], ``double` `Y[], ``int` `n)` `    ``{` `        ``double` `perimeter = ``0.0``;`   `        ``// Calculate value of perimeter` `        ``int` `j = n - ``1``;` `        ``for` `(``int` `i = ``0``; i < n; i++) {` `            ``perimeter += Math.sqrt((X[j] - X[i]) * (X[j] - X[i]) + ` `                                 ``(Y[j] - Y[i]) * (Y[j] - Y[i]));` `            ``j = i; ``// j is previous vertex to i` `        ``}`   `        ``return` `perimeter;` `    ``}`   `    ``// To find equable shape` `    ``static` `void` `equableShape(``double` `X[], ``double` `Y[], ``int` `n)` `    ``{` `        ``// Find area and perimeter of polygon if` `        ``// they are equal then it is equable shape` `        ``if` `(polygonPerimeter(X, Y, n) == polygonArea(X, Y, n))` `            ``System.out.println(``"Equable Shape"``);` `        ``else` `            ``System.out.println(``"Not Equable Shape"``);` `    ``}`   `    ``// Driver program to test above function` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``double` `X[] = { ``0``, ``5``, ``0` `};` `        ``double` `Y[] = { ``0``, ``0``, ``12` `};`   `        ``int` `n = X.length;`   `        ``equableShape(X, Y, n);` `    ``}` `}`

## Python3

 `# Python 3 program to find equable shape` `# To calculate area of polygon`   `import` `math` `def` `polygonArea(X, Y, n):` `    ``area ``=` `0.0` ` `  `    ``# Calculate value of area` `    ``# using shoelace  formula` `    ``j ``=` `n ``-` `1` `    ``for` `i ``in` `range``(n):` `        ``area ``+``=` `(X[j] ``+` `X[i]) ``*` `(Y[j] ``-` `Y[i])`   `        ``# j is previous vertex to i` `        ``j ``=` `i  ` `    ``return` `abs``(area ``/` `2.0``)` ` `  `# To calculate perimeter of polygon` `def` `polygonPerimeter(X, Y, n):` `    ``perimeter ``=` `0.0` ` `  `    ``# Calculate value of perimeter` `    ``j ``=` `n ``-` `1` `    ``for` `i ``in` `range``(n):` `        ``perimeter ``+``=` `math.sqrt((X[j] ``-` `X[i]) ``*` `(X[j] ``-` `X[i]) ``+` `                          ``(Y[j] ``-` `Y[i]) ``*` `(Y[j] ``-` `Y[i]))`   `        ``# j is previous vertex to i` `        ``j ``=` `i  `   `    ``return` `perimeter` ` `  `# To find equable shape` `def` `equableShape(X, Y, n):` `    ``# Find area and perimeter of polygon if` `    ``# they are equal then it is equable shape` `    ``if` `(polygonPerimeter(X, Y, n) ``=``=` `polygonArea(X, Y, n)):` `        ``print``(``"Equable Shape"``)` `    ``else``:` `        ``print``(``"Not Equable Shape"``)`   `#  Driver program to test above function` `X ``=` `[ ``0``, ``5``, ``0` `]` `Y ``=` `[ ``0``, ``0``, ``12` `]` `n ``=` `len``(X)` `equableShape(X, Y, n)`   `# This code is contributed by Azkia Anam.`

## C#

 `// C# program to find equable shape` `using` `System;`   `class` `equable {`   `    ``// To calculate area of polygon` `    ``static` `double` `polygonArea(``double` `[]X, ` `                              ``double` `[]Y, ` `                              ``int` `n)` `    ``{` `        ``double` `area = 0.0;`   `        ``// Calculate value of area using` `        ``// Shoelace Formula` `        ``int` `j = n - 1;` `        ``for` `(``int` `i = 0; i < n; i++)` `        ``{` `            ``area += (X[j] + X[i]) * (Y[j] - Y[i]);` `            ``j = i; ``// j is previous vertex to i` `        ``}`   `        ``return` `Math.Abs(area / 2.0);` `    ``}`   `    ``// To calculate perimeter of polygon` `    ``static` `double` `polygonPerimeter(``double` `[]X, ` `                                   ``double` `[]Y, ` `                                   ``int` `n)` `    ``{` `        ``double` `perimeter = 0.0;`   `        ``// Calculate value of perimeter` `        ``int` `j = n - 1;` `        ``for` `(``int` `i = 0; i < n; i++) {` `            ``perimeter += Math.Sqrt((X[j] - X[i]) *` `                                   ``(X[j] - X[i]) + ` `                                   ``(Y[j] - Y[i]) * ` `                                   ``(Y[j] - Y[i]));` `            ``j = i; ``// j is previous vertex to i` `        ``}`   `        ``return` `perimeter;` `    ``}`   `    ``// To find equable shape` `    ``static` `void` `equableShape(``double` `[]X, ` `                             ``double` `[]Y, ` `                             ``int` `n)` `    ``{` `        ``// Find area and perimeter of ` `        ``// polygon if they are equal ` `        ``// then it is equable shape` `        ``if` `(polygonPerimeter(X, Y, n) == ` `            ``polygonArea(X, Y, n))` `            ``Console.WriteLine(``"Equable Shape"``);` `        ``else` `            ``Console.WriteLine(``"Not Equable Shape"``);` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `Main(String []args)` `    ``{` `        ``double` `[]X = {0, 5, 0};` `        ``double` `[]Y = {0, 0, 12};`   `        ``int` `n = X.Length;` `        `  `        ``// Calling Function` `        ``equableShape(X, Y, n);` `    ``}` `}`   `// This Code is contributed by vt_m.`

## PHP

 ``

## Javascript

 ``

Output :

`Equable Shape`

Time Complexity: O(NlogN)

Auxiliary Space: O(N)
Reference:
https://en.wikipedia.org/wiki/Equable_shape

This article is contributed by nuclode. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.