给定一个椭圆,长轴长度为2a和2b 。任务是找到可以内接的最大矩形的面积。
例子:
Input: a = 4, b = 3
Output: 24
Input: a = 10, b = 8
Output: 160
方法:
让矩形的右上角有坐标(x, y) ,
然后是矩形的面积, A = 4*x*y 。
现在,
Equation of ellipse, (x2/a2) + (y2/b2) = 1
Thinking of the area as a function of x, we have
dA/dx = 4xdy/dx + 4y
Differentiating equation of ellipse with respect to x, we have
2x/a2 + (2y/b2)dy/dx = 0,
so,
dy/dx = -b2x/a2y,
and
dAdx = 4y – (4b2x2/a2y)
Setting this to 0 and simplifying, we have y2 = b2x2/a2.
From equation of ellipse we know that,
y2=b2 – b2x2/a2
Thus, y2=b2 – y2, 2y2=b2, and y2b2 = 1/2.
Clearly, then, x2a2 = 1/2 as well, and the area is maximized when
x= a/√2 and y=b/√2
So the maximum area Area, Amax = 2ab
下面是上述方法的实现:
C++
// C++ Program to find the biggest rectangle
// which can be inscribed within the ellipse
#include
using namespace std;
// Function to find the area
// of the rectangle
float rectanglearea(float a, float b)
{
// a and b cannot be negative
if (a < 0 || b < 0)
return -1;
// area of the rectangle
return 2 * a * b;
}
// Driver code
int main()
{
float a = 10, b = 8;
cout << rectanglearea(a, b) << endl;
return 0;
}
Java
// Java Program to find the biggest rectangle
// which can be inscribed within the ellipse
import java.util.*;
import java.lang.*;
import java.io.*;
class GFG{
// Function to find the area
// of the rectangle
static float rectanglearea(float a, float b)
{
// a and b cannot be negative
if (a < 0 || b < 0)
return -1;
// area of the rectangle
return 2 * a * b;
}
// Driver code
public static void main(String args[])
{
float a = 10, b = 8;
System.out.println(rectanglearea(a, b));
}
}
Python 3
# Python 3 Program to find the biggest rectangle
# which can be inscribed within the ellipse
# Function to find the area
# of the rectangle
def rectanglearea(a, b) :
# a and b cannot be negative
if a < 0 or b < 0 :
return -1
# area of the rectangle
return 2 * a * b
# Driver code
if __name__ == "__main__" :
a, b = 10, 8
print(rectanglearea(a, b))
# This code is contributed by ANKITRAI1
C#
// C# Program to find the
// biggest rectangle which
// can be inscribed within
// the ellipse
using System;
class GFG
{
// Function to find the area
// of the rectangle
static float rectanglearea(float a,
float b)
{
// a and b cannot be negative
if (a < 0 || b < 0)
return -1;
// area of the rectangle
return 2 * a * b;
}
// Driver code
public static void Main()
{
float a = 10, b = 8;
Console.WriteLine(rectanglearea(a, b));
}
}
// This code is contributed
// by inder_verma
PHP
Javascript
输出:
160