2017-02-12 11 views
0

Я пытаюсь сделать функцию в C, которая возвращает длину стороны треугольника, противоположную заданному углу, используя Закон косинусов.Написание закона вычисления косинусов

Теперь я получил формулу для работы в Excel и дал правильные результаты. Однако, когда я пробовал это на C, я получаю неправильные результаты, и я не могу понять, почему.

Для испытания у меня есть сторона A как 21.1, sideB как 19 и угол между ними как 40 градусов. Теперь ответ должен быть 14.9, как я получаю в excel. однако в C я получаю 23.735. Пожалуйста, помогите мне разобраться, где я ошибся

// Find the length of a side of a triangle that is oppisit a given angle using the Law Of Cosine 
// for example using an triangle that is 21.1cm on one side, 19 cm on the other and an angle of 40 degreese inbetween then.... 
// in excel it worked and the formuler was =SQRT(POWER(23.1;2)+POWER(19;2)-2*(23.1)*(19)*COS(40*(3.14159/180))) = 14.9 cm 
float my_Trig_LawOfCos_OppSideLength(float centerAngle, float sideA, float sideB) 
    { 
     float sideLengthPow2= (pow(sideA,2) + pow(sideB,2))) - ((2*sideA*sideB)*cos(centerAngle*(3.14159/180)); 
     float sideLength = sqrt(sideLengthPow2); 
     return sideLength; 
    } 
+2

Ваши скобки не сбалансированы (мой компилятор просто жаловался, когда я копировал ваш образец). Поэтому я не считаю, что это ваш фактический код. – StoryTeller

+0

[И когда я исправил * эту проблему, я получил ожидаемый результат] (http://ideone.com/Gd4oqO). – StoryTeller

+0

Обратите внимание, что если код использует 'float', он может также использовать функции' float': 'sqrtf()', 'cosf()' и т. Д. – chux

ответ

2

Это происходит, если вы передадите аргументы в неправильном порядке. Вы устанавливаете боковую длину 23.1 в положение угла.

def oppside(ang, lA, lB): return (lA**2+lB**2-2*(lA)*(lB)*cos(ang*(pi/180)))**0.5 

oppside(40,19,23.1) 
>>> 14.905575729577208 

oppside(19,23.1,40) 
>>> 19.65430416708927 

oppside(23.1,19,40) 
>>> 23.72490935854042 

Довольно часто вы можете найти такие ошибки, за счетом образования минимального исполняемый примера, который показывает неправильный результат, потому что тогда вы бы также документировать вызов ошибочной функции (и, возможно, даже увидеть это для себя).

Смежные вопросы