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

Last Updated : 27 Aug, 2022

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``)), ``"\n"``; ` `} `   `// Driver Code ` `\$hypotenuse` `= 5; ` `\$area` `= 6; `   `printRightAngleTriangle(``\$hypotenuse``, ``\$area``); `   `// This code is contributed by Sachin` `?>`

## Javascript

 ``

Output:

`3 4`

Time complexity: O(log(n)) because using inbuilt sqrt function
Auxiliary Space: O(1)

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

Previous
Next