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