# 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.