Open In App

Equable Shapes

Last Updated : 22 Jun, 2022
Comments
Improve
Suggest changes
Like Article
Like
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 = 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
<?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


 


Article Tags :

Explore