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 polygondouble 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 polygondouble 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 shapevoid 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 functionint 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 shapeclass 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 polygonimport mathdef 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 polygondef 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 shapedef 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 functionX = [ 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 shapeusing 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 polygonfunction 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 polygonfunction 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 shapefunction 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 polygonfunction 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 polygonfunction 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 shapefunction 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 codelet X = [ 0, 5, 0 ];let Y = [ 0, 0, 12 ];let n = X.length;// Calling FunctionequableShape(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
If you like zambiatek and would like to contribute, you can also write an article using write.zambiatek.co.uk or mail your article to review-team@zambiatek.co.uk. See your article appearing on the zambiatek 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.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



