# Find all sides of a right angled triangle from given hypotenuse and area | Set 1

Given hypotenuse and area of a right angle triangle, get its base and height and if any triangle with given hypotenuse and area is not possible, print not possible.

Examples:

```Input  : hypotenuse = 5,    area = 6
Output : base = 3, height = 4

Input : hypotenuse = 5, area = 7
Output : No triangle possible with above specification.
``` We can use a property of right angle triangle for solving this problem, which can be stated as follows,

```A right angle triangle with fixed hypotenuse attains
maximum area, when it is isosceles i.e. both height
and base becomes equal so if hypotenuse if H, then
by pythagorean theorem,
Base2 + Height2 = H2

For maximum area both base and height should be equal,
b2 + b2 = H2
b = sqrt(H2/2)

Above is the length of base at which triangle attains
maximum area, given area must be less than this maximum
area, otherwise no such triangle will possible.  ```

Now if given area is less than this maximum area, we can do a binary search for length of base, as increasing base will increases area, it is a monotonically increasing function where binary search can be applied easily.
In below code, a method is written for getting area of right angle triangle, recall that for right angle triangle area is ½*base*height and height can be calculated from base and hypotenuse using pythagorean theorem.

Below is the implementation of above approach:

## C++

 `// C++ program to get right angle triangle, given  ` `// hypotenuse and area of triangle  ` `#include   ` `using` `namespace` `std;  ` `   `  `//  limit for float comparison  ` `#define eps 1e-6  ` `   `  `// Utility method to get area of right angle triangle,  ` `// given base and hypotenuse  ` `double` `getArea(``double` `base, ``double` `hypotenuse)  ` `{  ` `    ``double` `height = ``sqrt``(hypotenuse*hypotenuse - base*base);  ` `    ``return` `0.5 * base * height;  ` `}  ` `   `  `// Prints base and height of triangle using hypotenuse  ` `// and area information  ` `void` `printRightAngleTriangle(``int` `hypotenuse, ``int` `area)  ` `{  ` `    ``int` `hsquare = hypotenuse * hypotenuse;  ` `   `  `    ``// maximum area will be obtained when base and height  ` `    ``// are equal (= sqrt(h*h/2))  ` `    ``double` `sideForMaxArea = ``sqrt``(hsquare / 2.0);  ` `    ``double` `maxArea = getArea(sideForMaxArea, hypotenuse);  ` `   `  `    ``// if given area itself is larger than maxArea then no  ` `    ``// solution is possible  ` `    ``if` `(area > maxArea)  ` `    ``{  ` `        ``cout << ``"Not possiblen"``;  ` `        ``return``;  ` `    ``}  ` `   `  `    ``double` `low = 0.0;  ` `    ``double` `high = sideForMaxArea;  ` `    ``double` `base;  ` `   `  `    ``// binary search for base  ` `    ``while` `(``abs``(high - low) > eps)  ` `    ``{  ` `        ``base = (low + high) / 2.0;  ` `        ``if` `(getArea(base, hypotenuse) >= area)  ` `            ``high = base;  ` `        ``else` `            ``low = base;  ` `    ``}  ` `   `  `    ``// get height by pythagorean rule  ` `    ``double` `height = ``sqrt``(hsquare - base*base);  ` `    ``cout << base << ``" "` `<< height << endl;  ` `}  ` `   `  `// Driver code to test above methods  ` `int` `main()  ` `{  ` `    ``int` `hypotenuse = 5;  ` `    ``int` `area = 6;  ` `   `  `    ``printRightAngleTriangle(hypotenuse, area);  ` `    ``return` `0;  ` `}  `

## Java

 `// Java program to get right angle triangle, given  ` `// hypotenuse and area of triangle ` `public` `class` `GFG { ` ` `  `// limit for float comparison  ` `    ``final` `static` `double` `eps = (``double``) 1e-``6``; ` ` `  `// Utility method to get area of right angle triangle,  ` `// given base and hypotenuse  ` `    ``static` `double` `getArea(``double` `base, ``double` `hypotenuse) { ` `        ``double` `height = Math.sqrt(hypotenuse * hypotenuse - base * base); ` `        ``return` `0.5` `* base * height; ` `    ``} ` ` `  `// Prints base and height of triangle using hypotenuse  ` `// and area information  ` `    ``static` `void` `printRightAngleTriangle(``int` `hypotenuse, ``int` `area) { ` `        ``int` `hsquare = hypotenuse * hypotenuse; ` ` `  `        ``// maximum area will be obtained when base and height  ` `        ``// are equal (= sqrt(h*h/2))  ` `        ``double` `sideForMaxArea = Math.sqrt(hsquare / ``2.0``); ` `        ``double` `maxArea = getArea(sideForMaxArea, hypotenuse); ` ` `  `        ``// if given area itself is larger than maxArea then no  ` `        ``// solution is possible  ` `        ``if` `(area > maxArea) { ` `            ``System.out.print(``"Not possible"``); ` `            ``return``; ` `        ``} ` ` `  `        ``double` `low = ``0.0``; ` `        ``double` `high = sideForMaxArea; ` `        ``double` `base = ``0``; ` ` `  `        ``// binary search for base  ` `        ``while` `(Math.abs(high - low) > eps) { ` `            ``base = (low + high) / ``2.0``; ` `            ``if` `(getArea(base, hypotenuse) >= area) { ` `                ``high = base; ` `            ``} ``else` `{ ` `                ``low = base; ` `            ``} ` `        ``} ` ` `  `        ``// get height by pythagorean rule  ` `        ``double` `height = Math.sqrt(hsquare - base * base); ` `        ``System.out.println(Math.round(base) + ``" "` `+ Math.round(height)); ` `    ``} ` ` `  `// Driver code to test above methods  ` `    ``static` `public` `void` `main(String[] args) { ` `        ``int` `hypotenuse = ``5``; ` `        ``int` `area = ``6``; ` ` `  `        ``printRightAngleTriangle(hypotenuse, area); ` `    ``} ` `} ` ` `  `// This code is contributed by 29AjayKumar `

## Python3

 `# Python 3 program to get right angle triangle, given  ` `# hypotenuse and area of triangle  ` ` `  `# limit for float comparison  ` `# define eps 1e-6  ` `import` `math ` ` `  `# Utility method to get area of right angle triangle,  ` `# given base and hypotenuse  ` `def` `getArea(base, hypotenuse): ` `    ``height ``=` `math.sqrt(hypotenuse``*``hypotenuse ``-` `base``*``base);  ` `    ``return` `0.5` `*` `base ``*` `height  ` ` `  `# Prints base and height of triangle using hypotenuse  ` `# and area information  ` `def` `printRightAngleTriangle(hypotenuse, area): ` `    ``hsquare ``=` `hypotenuse ``*` `hypotenuse  ` ` `  `    ``# maximum area will be obtained when base and height  ` `    ``# are equal (= sqrt(h*h/2))  ` `    ``sideForMaxArea ``=` `math.sqrt(hsquare ``/` `2.0``)  ` `    ``maxArea ``=` `getArea(sideForMaxArea, hypotenuse) ` ` `  `    ``# if given area itself is larger than maxArea then no  ` `    ``# solution is possible  ` `    ``if` `(area > maxArea): ` `        ``print``(``"Not possiblen"``)  ` `        ``return` `     `  `    ``low ``=` `0.0` `    ``high ``=` `sideForMaxArea  ` `     `  `    ``# binary search for base  ` `    ``while` `(``abs``(high ``-` `low) > ``1e``-``6``): ` `        ``base ``=` `(low ``+` `high) ``/` `2.0` `        ``if` `(getArea(base, hypotenuse) >``=` `area): ` `            ``high ``=``base ` `        ``else``: ` `            ``low ``=` `base ` `     `  `    ``# get height by pythagorean rule  ` `    ``height ``=` `math.ceil(math.sqrt(hsquare ``-` `base``*``base)) ` `    ``base ``=` `math.floor(base) ` `    ``print``(base,height)  ` ` `  `# Driver code to test above methods  ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``hypotenuse ``=` `5` `    ``area ``=` `6` ` `  `    ``printRightAngleTriangle(hypotenuse, area)  ` ` `  `# This code is contributed by ` `# Surendra_Gangwar `

## C#

 `// C# program to get right angle triangle, given  ` `// hypotenuse and area of triangle  ` ` `  `using` `System; ` `public` `class` `GFG{ ` ` `  ` `  `// limit for float comparison  ` `     ``static` `double` `eps = (``double``) 1e-6;  ` ` `  `// Utility method to get area of right angle triangle,  ` `// given base and hypotenuse  ` `    ``static` `double` `getArea(``double` `base1, ``double` `hypotenuse) {  ` `        ``double` `height = Math.Sqrt(hypotenuse * hypotenuse - base1 * base1);  ` `        ``return` `0.5 * base1 * height;  ` `    ``}  ` ` `  `// Prints base and height of triangle using hypotenuse  ` `// and area information  ` `    ``static` `void` `printRightAngleTriangle(``int` `hypotenuse, ``int` `area) {  ` `        ``int` `hsquare = hypotenuse * hypotenuse;  ` ` `  `        ``// maximum area will be obtained when base and height  ` `        ``// are equal (= sqrt(h*h/2))  ` `        ``double` `sideForMaxArea = Math.Sqrt(hsquare / 2.0);  ` `        ``double` `maxArea = getArea(sideForMaxArea, hypotenuse);  ` ` `  `        ``// if given area itself is larger than maxArea then no  ` `        ``// solution is possible  ` `        ``if` `(area > maxArea) {  ` `            ``Console.Write(``"Not possible"``);  ` `            ``return``;  ` `        ``}  ` ` `  `        ``double` `low = 0.0;  ` `        ``double` `high = sideForMaxArea;  ` `        ``double` `base1 = 0;  ` ` `  `        ``// binary search for base  ` `        ``while` `(Math.Abs(high - low) > eps) {  ` `            ``base1 = (low + high) / 2.0;  ` `            ``if` `(getArea(base1, hypotenuse) >= area) {  ` `                ``high = base1;  ` `            ``} ``else` `{  ` `                ``low = base1;  ` `            ``}  ` `        ``}  ` ` `  `        ``// get height by pythagorean rule  ` `        ``double` `height = Math.Sqrt(hsquare - base1 * base1);  ` `        ``Console.WriteLine(Math.Round(base1) + ``" "` `+ Math.Round(height));  ` `    ``}  ` ` `  `// Driver code to test above methods  ` `    ``static` `public` `void` `Main() {  ` `        ``int` `hypotenuse = 5;  ` `        ``int` `area = 6;  ` ` `  `        ``printRightAngleTriangle(hypotenuse, area);  ` `    ``}  ` `}  ` ` `  `// This code is contributed by 29AjayKumar  `

## PHP

 ` ``\$maxArea``)  ` `    ``{  ` `        ``echo` `"Not possiblen"``;  ` `        ``return``;  ` `    ``}  ` ` `  `    ``\$low` `= 0.0;  ` `    ``\$high` `= ``\$sideForMaxArea``;  ` `    ``\$base``;  ` ` `  `    ``// binary search for base  ` `    ``while` `(``abs``(``\$high` `- ``\$low``) > ``\$eps``)  ` `    ``{  ` `        ``\$base` `= (``\$low` `+ ``\$high``) / 2.0;  ` `        ``if` `(getArea(``\$base``, ``\$hypotenuse``) >= ``\$area``)  ` `            ``\$high` `= ``\$base``;  ` `        ``else` `            ``\$low` `= ``\$base``;  ` `    ``}  ` ` `  `    ``// get height by pythagorean rule  ` `    ``\$height` `= sqrt(``\$hsquare` `- ``\$base` `* ``\$base``);  ` `        ``echo` `(``ceil``(``\$base``)) ,``" "``,  ` `             ``(``floor``(``\$height``)), ````" "````;  ` `}  ` ` `  `// Driver Code  ` `\$hypotenuse` `= 5;  ` `\$area` `= 6;  ` ` `  `printRightAngleTriangle(``\$hypotenuse``, ``\$area``);  ` ` `  `// This code is contributed by Sachin ` `?> `

Output:

```3 4
```

One more solution is discussed in below post.
Check if right angles possible from given area and hypotenuse