# Divide an isosceles triangle in two parts with ratio of areas as n:m

Given the height of an isosceles triangle and two integers , . The task is to find the height from top of the triangle such that if we make a cut at height h from top parallel to base then the triangle must be divided into two parts with the ratio of their areas equal to **n:m**. **Examples**:

Input : H = 4, n = 1, m = 1 Output : 2.82843 Input : H = 4, n = 1, m = 0 Output : 4

First of all before proceeding let us mention some of the basic properties of an isosceles triangle.

Let â–²ABC is an isosceles triangle with AB = AC and BC being unequal side and base of the triangle. If D is mid-point of BC, then AD is our height H. Also, if we draw a parallel line to BC which cuts AB and AC at points E and F respectively and G being the midpoint of EF then â–²AEG is similar to â–²ABD, â–²AFG is similar to â–²ACD, â–²AEF is similar to â–²ABC, and by using properties of similar triangles we can conclude the following points: **AE/AB = AG/AD = EG/BD = EF/BC = AF/AC —–(i)**

As per problem’s requirement, we have to find out the height h, such that the ratio of the area of â–²AEF to the area of trapezium EFCB = n:m.

Let, h is the height of cut from the top of the triangle.

Now, area of â–²AEF = 0.5 * AG * EF and area of trapezium EFCB = 0.5 * GD * (EF+BC)

also, ratio of both is n:m.

So, we can say that ratio of area of â–²AEF to area of â–²ABC is equal to n :(n+m).

=> area of â–²AEF / area of â–²ABC = n / (n+m)

=> (0.5 * AG * EF) / (0.5 * AD * BC) = n / (n+m)

=> (AG/AD) * (EF/BC) = n / (n+m)

=> (EF/BC) * (EF/BC) = n / (n+m)

=> h^{2}/H^{2}= n / (n+m)

=>h = H*sqrt(n/(n+m))

Below is the implementation of the above approach:

## C++

`// C++ program, to find height h` `// which divide isosceles triangle` `// into ratio n:m` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function to return the height` `float` `heightCalculate(` `int` `H, ` `int` `n, ` `int` `m)` `{` ` ` `// type cast the n, m into float` ` ` `float` `N = n * 1.0;` ` ` `float` `M = m * 1.0;` ` ` `// calculate the height for cut` ` ` `float` `h = H * ` `sqrt` `(N / (N + M));` ` ` `return` `h;` `}` `// Driver code` `int` `main()` `{` ` ` `int` `H = 10, n = 3, m = 4;` ` ` `cout << heightCalculate(H, n, m);` ` ` `return` `0;` `}` |

## Java

`// Java program, to find height h` `// which divide isosceles triangle` `// into ratio n:m` `import` `java.io.*;` `class` `GFG {` `// Function to return the height` `static` `float` `heightCalculate(` `int` `H, ` `int` `n, ` `int` `m)` `{` ` ` `// type cast the n, m into float` ` ` `float` `N = (` `float` `)(n * ` `1.0` `);` ` ` `float` `M = (` `float` `)(m * ` `1.0` `);` ` ` `// calculate the height for cut` ` ` `float` `h = H *(` `float` `) Math.sqrt(N / (N + M));` ` ` `return` `h;` `}` `// Driver code` ` ` `public` `static` `void` `main (String[] args) {` ` ` `int` `H = ` `10` `, n = ` `3` `, m = ` `4` `;` ` ` `System.out.print( heightCalculate(H, n, m));` ` ` `}` `}` |

## Python3

`# Python 3 program, to find height` `# h which divide isosceles triangle` `# into ratio n:m` `from` `math ` `import` `sqrt` `# Function to return the height` `def` `heightCalculate(H, n, m):` ` ` ` ` `# type cast the n, m into float` ` ` `N ` `=` `n ` `*` `1.0` ` ` `M ` `=` `m ` `*` `1.0` ` ` ` ` `# calculate the height for cut` ` ` `h ` `=` `H ` `*` `sqrt(N ` `/` `(N ` `+` `M))` ` ` `return` `h` `# Driver code` `if` `__name__ ` `=` `=` `'__main__'` `:` ` ` `H ` `=` `10` ` ` `n ` `=` `3` ` ` `m ` `=` `4` ` ` `print` `(` `"{0:.6}"` `.` ` ` `format` `(heightCalculate(H, n, m)));` ` ` `# This code is contributed` `# by Surendra_Gangwar` |

## C#

`// C# program, to find height h` `// which divide isosceles triangle` `// into ratio n:m` `using` `System;` `class` `GFG` `{` `// Function to return the height` `static` `float` `heightCalculate(` `int` `H,` ` ` `int` `n, ` `int` `m)` `{` ` ` `// type cast the n, m into float` ` ` `float` `N = (` `float` `)(n * 1.0);` ` ` `float` `M = (` `float` `)(m * 1.0);` ` ` ` ` `// calculate the height for cut` ` ` `float` `h = H * (` `float` `) Math.Sqrt(N / (N + M));` ` ` `return` `h;` `}` `// Driver code` `public` `static` `void` `Main ()` `{` ` ` `int` `H = 10, n = 3, m = 4;` ` ` `Console.WriteLine(heightCalculate(H, n, m));` `}` `}` `// This code is contributed` `// by inder_verma` |

## PHP

`<?php` `// PHP program, to find height h` `// which divide isosceles triangle` `// into ratio n:m` `// Function to return the height` `function` `heightCalculate(` `$H` `, ` `$n` `, ` `$m` `)` `{` ` ` `// type cast the n, m into float` ` ` `$N` `= ` `$n` `* 1.0;` ` ` `$M` `= ` `$m` `* 1.0;` ` ` ` ` `// calculate the height for cut` ` ` `$h` `= ` `$H` `* sqrt(` `$N` `/ (` `$N` `+ ` `$M` `));` ` ` `return` `$h` `;` `}` `// Driver code` `$H` `= 10; ` `$n` `= 3; ` `$m` `= 4;` `echo` `heightCalculate(` `$H` `, ` `$n` `, ` `$m` `);` `// This code is contributed` `// by anuj_67` `?>` |

## Javascript

`<script>` `// JavaScript program, to find height h` `// which divide isosceles triangle` `// into ratio n:m` `// Function to return the height` `function` `heightCalculate(H, n, m)` `{` ` ` `// type cast the n, m into float` ` ` `let N = n * 1.0;` ` ` `let M = m * 1.0;` ` ` `// calculate the height for cut` ` ` `let h = H * Math.sqrt(N / (N + M));` ` ` `return` `h;` `}` `// Driver code` ` ` `let H = 10, n = 3, m = 4;` ` ` `document.write(heightCalculate(H, n, m));` `// This code is contributed by Surbhi Tyagi.` `</script>` |

**Output**

6.54654

**Time Complexity**: O(log(n)) as it is using inbuilt sqrt function**Auxiliary Space**: O(1)