Тригонометрия грех возвратный отрицательный - PullRequest
3 голосов
/ 04 февраля 2011

Я сделал этот код на Python

def hitsin(a):
    a = a*57.3
    return math.sin(a)

поэтому всякий раз, когда я помещаю hitin (x), x преобразуется в радианы. Я путаю, когда ставлю hitin (90), ответ не 1 или любое число около 1, но отрицательный (это было -0,9971392129043587) Я делаю это неправильно?

p.s: Я также пытаюсь написать такой же код на C

#include <stdio.h>
#include <math.h>

int main(){
    float degree;
    float result;

    degree = 90;
    degree = degree*57.3;
    result  = cos(result);

    printf("%f",result);

    return 1;
}

Но ответ тот же.

искренне ваш Гири

Ответы [ 4 ]

13 голосов
/ 04 февраля 2011

Вы должны делить на 180/pi, а не умножать. В Python вы также можете использовать math.radians() для перевода из градусов в радианы:

def hitsin(a):
    return math.sin(math.radians(a))
hitsin(90)
# 1.0

Кроме того, я сомневаюсь, что код C дает тот же результат, что и код Python, потому что он использует cos() вместо sin().

6 голосов
/ 04 февраля 2011

Вам нужно поделить на 57,3 (или лучше приблизительное значение до 180 / π), а не умножить.

1 голос
/ 04 февраля 2011

Вы сделали ошибку преобразования единиц:

Чтобы преобразовать градусы в радианы:

radians = (2 * pi * degrees) / 360

Что дает:

radians = degrees / 57.295... = degrees * 0.01745...
0 голосов
/ 04 февраля 2011

Коэффициент 57,29 ... конвертируется из радианов в градусы. Однако вам нужно сделать прямо противоположное.

def degree_to_radian(x):
    from math import pi
    return x*pi/180

# pi/180 = 0.0174…

def degsin(x):
    from math import sin
    return sin(degree_to_radian(x))
...