Open In App
Related Articles

Equable Shapes

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Report issue
Report

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



 



Last Updated : 22 Jun, 2022
Like Article
Save Article
Share your thoughts in the comments
Similar Reads