Найти углы треугольника

95
22 ноября 2019, 09:50

Даны длины сторон треугольника и необходимо найти углы треугольника. При решении этой задачи я использую теорему косинусов

    let triangleAngles = (a, b, c) => { 
        let a1, a2, a3, cosA, cosB, cosC; 
        cosA = (b*b + c*c - a*a) / (2*b*c); 
        cosB = (a*a + c*c - b*b) / (2*a*c); 
        cosC = (a*a + b*b - c*c) / (2*a*b); 
     
        a1 = (b*b) + (c*c) - ((2*b*c) * Math.cos(cosA)); 
        a2 = (b*b) + (c*c) - ((2*c*a) * Math.cos(cosB)); 
        a3 = (b*b) + (a*a) - ((2*b*a) * Math.cos(cosC)); 
     
        return [Math.round(a1), Math.round(a2), Math.round(a3)]; 
    } 
     
    console.log(triangleAngles(4,4,4)); 
    console.log(triangleAngles(3,4,5));

Первый вариант считает правильно возвращает углы в 60 градусов, в вот при втором случае получается массив [68, 65, 49], это не верно. Подскажите, где ошибся в расчётах :)

Answer 1

Чтобы посчитать углы, нужно к значению косинуса (cosA и т.д.) применить функцию арккосинус (Math.acos). Результат будет в радианах, их можно перевести в градусы, умножив на 180 и разделив на Pi

angleA = Math.acos(cosA) * 180 / Math.PI;

   let triangleAngles = (a, b, c) => { 
        let a1, a2, a3, cosA, cosB, cosC; 
        cosA = (b*b + c*c - a*a) / (2*b*c); 
        cosB = (a*a + c*c - b*b) / (2*a*c); 
        cosC = (a*a + b*b - c*c) / (2*a*b); 
     
        angleA = Math.acos(cosA) * 180 / Math.PI; 
        angleB = Math.acos(cosB) * 180 / Math.PI; 
        angleC = Math.acos(cosC) * 180 / Math.PI; 
     
        return [Math.round(angleA), Math.round(angleB), Math.round(angleC)]; 
    } 
     
    console.log(triangleAngles(4,4,4)); 
    console.log(triangleAngles(3,4,5));

Выражения же для a1,a2,a3 бессмысленны.

Вот так:

a1 = (b*b) + (c*c) - (2*b*c) * cosA;

можно посчитать квадрат третьей стороны, но она и так известна

READ ALSO
Вернуть значение промиса [дубликат]

Вернуть значение промиса [дубликат]

На данный вопрос уже ответили:

84
Почему не видит функцию из прототипа?

Почему не видит функцию из прототипа?

Решил написать свой полифил для bind, функцию, которую оборачивать, планирую брать из thisНо получаю ошибку, что не видит мою функцию, что я записал...

94
Как в цикле узнать дистанции

Как в цикле узнать дистанции

Задача,- узнать дистанции до точки, от нескольких "пунктов отправления"Есть,- массив координат точек А которые в цикле и перебираются, и неизменная...

114
Перебор Object.keys, потеря объектов на выходе

Перебор Object.keys, потеря объектов на выходе

Передаю в функцию json файл c 4 объектами на выход получаю только 3 внутри функции все 4 объектаКуда теряется 2 объект?

88