Skip to content
Related Articles

Related Articles

Equable Shapes

View Discussion
Improve Article
Save Article
  • Difficulty Level : Hard
  • Last Updated : 22 Jun, 2022
View Discussion
Improve Article
Save Article

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 <bits/stdc++.h>
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[0]);
 
    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 =
    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 =
 
    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




<?php
// PHP program to find
// equable shape
 
// To calculate area
// of polygon
function polygonArea($X, $Y, $n)
{
    $area = 0.0;
 
    // Calculate value of area
    // using shoelace formula
    $j = $n - 1;
    for ($i = 0; $i < $n; $i++)
    {
        $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
function polygonPerimeter($X, $Y, $n)
                                     
{
    $perimeter = 0.0;
 
    // Calculate value of perimeter
    $j = $n - 1;
    for ($i = 0; $i < $n; $i++)
    {
        $perimeter += 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
function 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))
            echo "Equable Shape";
    else
            echo "Not Equable Shape";
}
 
// Driver Code
$X = array( 0, 5, 0 );
$Y = array( 0, 0, 12 );
 
$n = sizeof($X);
 
equableShape($X, $Y, $n);
 
// This code is contributed by ajit
?>


Javascript




<script>
 
// Javascript program to find equable shape
 
// To calculate area of polygon
function polygonArea(X, Y, n)
{
    let area = 0.0;
 
    // Calculate value of area using
    // Shoelace Formula
    let j = n - 1;
    for(let i = 0; i < n; i++)
    {
        area += (X[j] + X[i]) * (Y[j] - Y[i]);
         
        // j is previous vertex to i
        j = i;
    }
 
    return Math.abs(area / 2.0);
}
 
// To calculate perimeter of polygon
function polygonPerimeter(X, Y, n)
{
    let perimeter = 0.0;
 
    // Calculate value of perimeter
    let j = n - 1;
    for(let 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 is previous vertex to i                      
        j = i;
    }
    return perimeter;
}
 
// To find equable shape
function 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))
        document.write("Equable Shape" + "</br>");
    else
        document.write("Not Equable Shape" + "</br>");
}
 
// Driver code
let X = [ 0, 5, 0 ];
let Y = [ 0, 0, 12 ];
 
let n = X.length;
 
// Calling Function
equableShape(X, Y, n);
 
// This code is contributed by suresh07 
 
</script>


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.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!