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
Recommended Articles