Tutorialspoint.dev

Check if right triangle possible from given area and hypotenuse

Given area and hypotenuse, the aim is to print all sides if right triangle can exist, else print -1. We need to print all sides in ascending order.

Examples:

Input  : 6 5
Output : 3 4 5

Input  : 10 6
Output : -1



We have discussed a solution of this problem in below post.
Find all sides of a right angled triangle from given hypotenuse and area | Set 1

In this post, a new solution with below logic is discussed.

Let the two unknown sides be a and b
Area : A = 0.5 * a * b
Hypotenuse Square : H^2 = a^2 + b^2
Substituting b, we get H2 = a2 + (4 * A2)/a2
On re-arranging, we get the equation a4 – (H2)(a2) + 4*(A2)

The discriminant D of this equation would be D = H4 – 16*(A2)
If D = 0, then roots are given by the linear equation formula, roots = (-b +- sqrt(D) )/2*a
these roots would be equal to the square of the sides, finding the square roots would give us the sides.

C++

// C++ program to check existence of
// right triangle.
#include <bits/stdc++.h>
using namespace std;
  
// Prints three sides of a right trianlge
// from given area and hypotenuse if triangle
// is possible, else prints -1.
void findRightAngle(int A, int H) 
{
    // Descriminant of the equation
    long D = pow(H, 4) - 16 * A * A;
      
    if (D >= 0) 
    {
        // applying the linear equation
        // formula to find both the roots
        long root1 = (H * H + sqrt(D)) / 2;
        long root2 = (H * H - sqrt(D)) / 2;
      
        long a = sqrt(root1);
        long b = sqrt(root2);
          
        if (b >= a)
        cout << a << " " << b << " " << H;
        else
        cout << b << " " << a << " " << H;
    }
    else
        cout << "-1";
}
  
// Driver code
int main() 
{
    findRightAngle(6, 5); 
      
}
  
// This code is contributed By Anant Agarwal.

Java

// Java program to check existence of
// right triangle.
  
class GFG {
      
    // Prints three sides of a right trianlge
    // from given area and hypotenuse if triangle
    // is possible, else prints -1.
    static void findRightAngle(double A, double H) 
    {
        // Descriminant of the equation
        double D = Math.pow(H, 4) - 16 * A * A;
          
        if (D >= 0)
        {
            // applying the linear equation
            // formula to find both the roots
            double root1 = (H * H + Math.sqrt(D)) / 2;
            double root2 = (H * H - Math.sqrt(D)) / 2;
          
            double a = Math.sqrt(root1);
            double b = Math.sqrt(root2);
            if (b >= a)
                System.out.print(a + " " + b + " " + H);
            else
                System.out.print(b + " " + a + " " + H);
        
        else
            System.out.print("-1");
    }
      
    // Driver code
    public static void main(String arg[]) 
    {
        findRightAngle(6, 5);
    }
}
  
// This code is contributed by Anant Agarwal.

Python

# Python program to check existence of
# right triangle.
from math import sqrt
  
# Prints three sides of a right trianlge
# from given area and hypotenuse if triangle
# is possible, else prints -1.
def findRightAngle(A, H):
  
    # Descriminant of the equation
    D = pow(H,4) - 16 * A * A
    if D >= 0:
  
        # applying the linear equation
        # formula to find both the roots
        root1 = (H * H + sqrt(D))/2
        root2 = (H * H - sqrt(D))/2
  
        a = sqrt(root1)
        b = sqrt(root2)
        if b >= a:
            print a, b, H
        else:
            print b, a, H
    else:
        print "-1"
  
# Driver code
# Area is 6 and hypotenuse is 5.
findRightAngle(6, 5)

C#

// C# program to check existence of
// right triangle.
using System;
  
class GFG {
  
    // Prints three sides of a right trianlge
    // from given area and hypotenuse if triangle
    // is possible, else prints -1.
    static void findRightAngle(double A, double H)
    {
          
        // Descriminant of the equation
        double D = Math.Pow(H, 4) - 16 * A * A;
  
        if (D >= 0) {
              
            // applying the linear equation
            // formula to find both the roots
            double root1 = (H * H + Math.Sqrt(D)) / 2;
            double root2 = (H * H - Math.Sqrt(D)) / 2;
  
            double a = Math.Sqrt(root1);
            double b = Math.Sqrt(root2);
              
            if (b >= a)
                Console.WriteLine(a + " " + b + " " + H);
            else
                Console.WriteLine(b + " " + a + " " + H);
        }
        else
            Console.WriteLine("-1");
    }
  
    // Driver code
    public static void Main()
    {
        findRightAngle(6, 5);
    }
}
  
// This code is contributed by vt_m.

PHP

<?php
// PHP program to check existence of
// right triangle.
  
// Prints three sides of a right trianlge
// from given area and hypotenuse if 
// triangle is possible, else prints -1.
function findRightAngle($A, $H
{
      
    // Descriminant of the equation
    $D = pow($H, 4) - 16 * $A * $A;
      
    if ($D >= 0) 
    {
          
        // applying the linear equation
        // formula to find both the roots
        $root1 = ($H * $H + sqrt($D)) / 2;
        $root2 = ($H * $H - sqrt($D)) / 2;
      
        $a = sqrt($root1);
        $b = sqrt($root2);
          
        if ($b >= $a)
            echo $a , " ", $b , " " , $H;
        else
        echo $b , " " , $a , " " , $H;
    }
    else
        echo "-1";
}
  
    // Driver code
    findRightAngle(6, 5); 
      
// This code is contributed By Anuj_67
?>


Output:

3 4 5

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



This article is attributed to GeeksforGeeks.org

leave a comment

code

0 Comments

load comments

Subscribe to Our Newsletter