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
If you like neveropen and would like to contribute, you can also write an article using write.neveropen.co.uk or mail your article to review-team@neveropen.co.uk. See your article appearing on the neveropen 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 neveropen!