Условие
Найти длины биссектрис [latex]a_1[/latex], [latex]b_1[/latex], [latex]c_1[/latex] треугольника, если известны длины противоположных сторон [latex]a[/latex], [latex]b[/latex], [latex]c[/latex].
Тестирование
№ |
Входные данные |
Выходные данные |
1 |
6, 7, 9 |
7.35803, 6.49923, 4.67652 |
2 |
3.5, 4.5, 5.5 |
4.66027, 3.79967, 2.88195 |
3 |
100000, 100000, 100000 |
86602.5, 86602.5, 86602.5 |
4 |
1, 1.118034, 1.118034 |
1, 0.898056, 0.898056 |
Код
|
#include <iostream> #include <cmath> using namespace std; double getL(double c, double a, double b) { // Возвращает длину биссектрисы к стороне A при сторонах A, B, C double s = a + b; return sqrt(a * b * (s + c) * (s - c))/s; // Формула длины биссектрисы через три стороны } int main() { double a, b, c; cin >> a >> b >> c; cout << "Длины биссектрис к сторонам A, B и C равны " << getL(a, b, c) << ", " << getL(b, a, c) << " и " << getL(c, a, b) << "."; return 0; } |
Решение
Для вычисления длины биссектрисы через три стороны произвольного треугольника воспользуемся формулой [latex]l_c = \frac{\sqrt{ab(a+b+c)(a+b-c)}}{a+b}[/latex], где:
- [latex]l_c[/latex] — длина биссектрисы, проведенной к стороне [latex]c[/latex];
- [latex]a[/latex], [latex]b[/latex], [latex]c[/latex] — стороны треугольника.
Формула достаточно громоздкая, а так как использовать мы ее будем трижды — для вычисления длины каждой из биссектрис, — имеет смысл написать функцию, которая бы получала длины трех сторон треугольника и возвращала длину биссектрисы, проведенной к первой из указанных сторон:
|
double getL(double c, double a, double b) { return sqrt(a * b * (a + b + c) * (a + b - c))/(a + b); } |
Можно заметить, что сумма [latex]a+b[/latex] встречается в формуле три раза. Для лучшей читаемости и компактности кода заменим
a + b на
s :
|
double getL(double c, double a, double b) { double s = a + b; return sqrt(a * b * (s + c) * (s - c))/s; } |
Наконец, в главной функции после получения длин сторон треугольника остается вывести длины самих биссектрис. Для этого используем вышеописанную функцию
getL , каждый раз меняя первый параметр (при этом порядок двух других не имеет значения):
|
cout << "Длины биссектрис к сторонам A, B и C равны " << getL(a, b, c) << ", " << getL(b, a, c) << " и " << getL(c, a, b) << "."; |
Ссылки
Код программы на Ideone.com;
Формулы длины биссектрис в треугольнике;