Given a semicircle of radius r, the task is to find the largest trapezoid that can be inscribed in the semicircle, with base lying on the diameter.
Examples:
Input: r = 5 Output: 32.476 Input: r = 8 Output: 83.1384
Approach: Let r be the radius of the semicircle, x be the lower edge of the trapezoid, and y the upper edge, & h be the height of the trapezoid.
Now from the figure,
r^2 = h^2 + (y/2)^2
or, 4r^2 = 4h^2 + y^2
y^2 = 4r^2 – 4h^2
y = 2?(r^2 – h^2)
We know, Area of Trapezoid, A = (x + y)*h/2
So, A = hr + h?(r^2 – h^2)
taking the derivative of this area function with respect to h, (noting that r is a constant since we are given the semicircle of radius r to start with)
dA/dh = r + ?(r^2 – h^2) – h^2/?(r^2 – h^2)
To find the critical points we set the derivative equal to zero and solve for h, we get
h = ?3/2 * r
So, x = 2 * r & y = r
So, A = (3 * ?3 * r^2)/4
Below is the implementation of above approach:
C++
// C++ Program to find the biggest trapezoid // which can be inscribed within the semicircle #include <bits/stdc++.h> using namespace std; // Function to find the area // of the biggest trapezoid float trapezoidarea( float r) { // the radius cannot be negative if (r < 0) return -1; // area of the trapezoid float a = (3 * sqrt (3) * pow (r, 2)) / 4; return a; } // Driver code int main() { float r = 5; cout << trapezoidarea(r) << endl; return 0; } |
Java
// Java Program to find the biggest trapezoid // which can be inscribed within the semicircle import java.util.*; import java.lang.*; import java.io.*; class GFG{ // Function to find the area // of the biggest trapezoid static float trapezoidarea( float r) { // the radius cannot be negative if (r < 0 ) return - 1 ; // area of the trapezoid float a = ( 3 * ( float )Math.sqrt( 3 ) * ( float )Math.pow(r, 2 )) / 4 ; return a; } // Driver code public static void main(String args[]) { float r = 5 ; System.out.printf( "%.3f" ,trapezoidarea(r)); } } |
Python 3
# Python 3 Program to find the biggest trapezoid # which can be inscribed within the semicircle # from math import everything from math import * # Function to find the area # of the biggest trapezoid def trapezoidarea(r) : # the radius cannot be negative if r < 0 : return - 1 # area of the trapezoid a = ( 3 * sqrt( 3 ) * pow (r, 2 )) / 4 return a # Driver code if __name__ = = "__main__" : r = 5 print ( round (trapezoidarea(r), 3 )) # This code is contributed by ANKITRAI1 |
C#
// C# Program to find the biggest // trapezoid which can be inscribed // within the semicircle using System; class GFG { // Function to find the area // of the biggest trapezoid static float trapezoidarea( float r) { // the radius cannot be negative if (r < 0) return -1; // area of the trapezoid float a = (3 * ( float )Math.Sqrt(3) * ( float )Math.Pow(r, 2)) / 4; return a; } // Driver code public static void Main() { float r = 5; Console.WriteLine( "" + trapezoidarea(r)); } } // This code is contributed // by inder_verma |
PHP
<?php // PHP Program to find the biggest // trapezoid which can be inscribed // within the semicircle // Function to find the area // of the biggest trapezoid function trapezoidarea( $r ) { // the radius cannot be negative if ( $r < 0) return -1; // area of the trapezoid $a = (3 * sqrt(3) * pow( $r , 2)) / 4; return $a ; } // Driver code $r = 5; echo trapezoidarea( $r ). "\n" ; // This code is contributed // by ChitraNayal ?> |
Javascript
<script> // javascript Program to find the biggest trapezoid // which can be inscribed within the semicircle // Function to find the area // of the biggest trapezoid function trapezoidarea(r) { // the radius cannot be negative if (r < 0) return -1; // area of the trapezoid var a = (3 * Math.sqrt(3) * Math.pow(r, 2)) / 4; return a; } // Driver code var r = 5; document.write(trapezoidarea(r).toFixed(3)); // This code contributed by Princi Singh </script> |
32.476
Time complexity: O(1)
Auxiliary space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!