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.

/div>

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

You Might Also Like

leave a comment

code

0 Comments

load comments

Subscribe to Our Newsletter