Tutorialspoint.dev

Equable Shapes

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);
    }
}

Python 3

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


Output :

Equable Shape

Reference:
https://en.wikipedia.org/wiki/Equable_shape

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



This article is attributed to GeeksforGeeks.org

leave a comment

code

0 Comments

load comments

Subscribe to Our Newsletter