Условие
Найти длины биссектрис [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 |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#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] — стороны треугольника.
Формула достаточно громоздкая, а так как использовать мы ее будем трижды — для вычисления длины каждой из биссектрис, — имеет смысл написать функцию, которая бы получала длины трех сторон треугольника и возвращала длину биссектрисы, проведенной к первой из указанных сторон:
1 2 3 |
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 :
1 2 3 4 |
double getL(double c, double a, double b) { double s = a + b; return sqrt(a * b * (s + c) * (s - c))/s; } |
Наконец, в главной функции после получения длин сторон треугольника остается вывести длины самих биссектрис. Для этого используем вышеописанную функцию getL , каждый раз меняя первый параметр (при этом порядок двух других не имеет значения):
1 |
cout << "Длины биссектрис к сторонам A, B и C равны " << getL(a, b, c) << ", " << getL(b, a, c) << " и " << getL(c, a, b) << "."; |
Ссылки
Код программы на Ideone.com;
Формулы длины биссектрис в треугольнике;
Список задач на линейные вычисления.
Зачтено.
Есть несколько моментов на которые следует обратить внимание. А может и доделать.
— Если Вы не выводите формулу сами, то нужно дать ссылку на то место, где её выводят.
— Желательно определить порядок в котором выводятся результаты. Например, по возрастанию значений или в порядке следования сторон противолежащих углов.