Maximum area of quadrilateral

Last Updated : 8 Aug, 2024

Given four sides of quadrilateral a, b, c, d, find the maximum area of the quadrilateral possible from the given sides .
Examples: 
 

Input : 1 2 1 2
Output : 2.00
It is optimal to construct a rectangle for maximum area .


 


 


According to Bretschneider's formula, the area of a general quadrilateral is given by K={\sqrt {(s-a)(s-b)(s-c)(s-d)-abcd\cdot \cos ^{2}\left({\frac {\alpha +\gamma }{2}}\right)}}        
Here a, b, c, d are the sides of a quadrilateral, s is the semiperimeter of a quadrilateral and angles are two opposite angles. 
So, this formula is maximized only when opposite angles sum to pi(180) then we can use a simplified form of Bretschneider's formula to get the (maximum) area K. 
K={\sqrt {(s-a)(s-b)(s-c)(s-d)}}        
This formula is called as Brahmagupta's formula
Below is the implementation of given approach
 

C++
// CPP program to find maximum area of a 
// quadrilateral
#include <iostream>
#include <math.h>
using namespace std;
 
double maxArea(double a, double b,
                double c, double d)
{
    // Calculating the semi-perimeter 
    // of the given quadrilateral
    double semiperimeter = (a + b + c + d) / 2;
 
    // Applying Brahmagupta's formula to
    // get maximum area of quadrilateral
    return sqrt((semiperimeter - a) *
                (semiperimeter - b) * 
                (semiperimeter - c) * 
                (semiperimeter - d));
}
 
// Driver code
int main()
{
    double a = 1, b = 2, c= 1, d = 2;
   cout <<maxArea(a, b, c, d);
    return 0;
}

// This code is contributed by shivanisinghss2110
C
// CPP program to find maximum area of a 
// quadrilateral
#include <stdio.h>
#include <math.h>
 
double maxArea(double a, double b,
                double c, double d)
{
    // Calculating the semi-perimeter 
    // of the given quadrilateral
    double semiperimeter = (a + b + c + d) / 2;
 
    // Applying Brahmagupta's formula to
    // get maximum area of quadrilateral
    return sqrt((semiperimeter - a) *
                (semiperimeter - b) * 
                (semiperimeter - c) * 
                (semiperimeter - d));
}
 
// Driver code
int main()
{
    double a = 1, b = 2, c= 1, d = 2;
    printf("%.2f\n",maxArea(a, b, c, d));
    return 0;
}
Java
// Java program to find maximum area of a 
// quadrilateral
import java.io.*;

class GFG 
{
    static double maxArea(double a, double b,
                           double c, double d)
    {
        // Calculating the semi-perimeter 
        // of the given quadrilateral
        double semiperimeter = (a + b + c + d) / 2;
    
        // Applying Brahmagupta's formula to
        // get maximum area of quadrilateral
        return Math.sqrt((semiperimeter - a) *
                         (semiperimeter - b) * 
                         (semiperimeter - c) * 
                         (semiperimeter - d));
    }
    
    // Driver code
    public static void main (String[] args) 
    {
        double a = 1, b = 2, c= 1, d = 2;
        System.out.println(maxArea(a, b, c, d));
    }
}

// This code is contributed by sunnysingh
Python3
# Python3 program to find maximum 
# area of a quadrilateral
import math

def maxArea (a , b , c , d ):

    # Calculating the semi-perimeter
    # of the given quadrilateral
    semiperimeter = (a + b + c + d) / 2
    
    # Applying Brahmagupta's formula to
    # get maximum area of quadrilateral
    return math.sqrt((semiperimeter - a) *
                    (semiperimeter - b) *
                    (semiperimeter - c) * 
                    (semiperimeter - d))

# Driver code
a = 1
b = 2
c = 1
d = 2
print("%.2f"%maxArea(a, b, c, d))

# This code is contributed by "Sharad_Bhardwaj".
C#
// C# program to find maximum area of a 
// quadrilateral
using System;

class GFG {
    
    static double maxArea(double a, double b,
                          double c, double d)
    {
        
        // Calculating the semi-perimeter 
        // of the given quadrilateral
        double semiperimeter = (a + b + c + d) / 2;
    
        // Applying Brahmagupta's formula to
        // get maximum area of quadrilateral
        return Math.Sqrt((semiperimeter - a) *
                         (semiperimeter - b) * 
                         (semiperimeter - c) * 
                         (semiperimeter - d));
    }
    
    // Driver code
    public static void Main () 
    {
        double a = 1, b = 2, c= 1, d = 2;
        
        Console.WriteLine(maxArea(a, b, c, d));
    }
}

// This code is contributed by vt_m.
JavaScript
<script>

// JavaScript program to find maximum area of a 
// quadrilateral 

function maxArea(a, b, c, d) 
{ 
    // Calculating the semi-perimeter 
    // of the given quadrilateral 
    let semiperimeter = (a + b + c + d) / 2; 

    // Applying Brahmagupta's formula to 
    // get maximum area of quadrilateral 
    return Math.sqrt((semiperimeter - a) * 
                (semiperimeter - b) * 
                (semiperimeter - c) * 
                (semiperimeter - d)); 
} 

// Driver code 

    let a = 1, b = 2, c= 1, d = 2; 
    document.write(maxArea(a, b, c, d)); 

// This code is contributed by Surbhi Tyagi.

</script>
PHP
<?php
// PHP program to find maximum area of a 
// quadrilateral

function maxArea( $a, $b, $c, $d)
{
    
    // Calculating the semi-perimeter 
    // of the given quadrilateral
    $semiperimeter = ($a + $b + $c + $d) / 2;

    // Applying Brahmagupta's formula to
    // get maximum area of quadrilateral
    return sqrt(($semiperimeter - $a) *
                ($semiperimeter - $b) * 
                ($semiperimeter - $c) * 
                ($semiperimeter - $d));
}

// Driver code
$a = 1; $b = 2; $c= 1; $d = 2;
echo(maxArea($a, $b, $c, $d));

// This code is contributed by vt_m.
?>

Output:  

2.00

Time Complexity: O(logn) 
Auxiliary Space: O(1)

Please suggest if someone has a better solution which is more efficient in terms of space and time.
 

Comment