在python中Sin和Cos函数不正确

时间:2015-02-28 10:31:59

标签: python math pygame

我正试图在游戏中做一个自上而下的射击游戏。当我添加代码以使玩家朝他们面对的方向移动时。玩家会朝奇怪的方向移动。这是我正在使用的代码:

        if pygame.key.get_pressed()[K_UP]:
            playerX = playerX - math.cos(playerFacing)
            playerY = playerY - math.sin(playerFacing)
        if pygame.key.get_pressed()[K_DOWN]:
            playerX = playerX + math.cos(playerFacing)
            playerY = playerY + math.sin(playerFacing)

我尝试输入math.cos(90)并且它等于-0.299515394756但是我的计算器告诉我它等于0.我可能只是犯了一个愚蠢的错误,但任何人都可以告诉我我做错了什么。 谢谢 Xeno

2 个答案:

答案 0 :(得分:7)

math.sinmath.cos等在radians中采用角度。

您可以使用math.radians将度数转换为弧度。所以:

math.sin(math.radians(90)) == 0

你可以在发布的代码片段中修复它:

if pygame.key.get_pressed()[K_UP]:
            playerX = playerX - math.cos(math.radians(playerFacing))
            playerY = playerY - math.sin(math.radians(playerFacing))
        if pygame.key.get_pressed()[K_DOWN]:
            playerX = playerX + math.cos(math.radians(playerFacing))
            playerY = playerY + math.sin(math.radians(playerFacing))

但是我建议到处使用弧度。

答案 1 :(得分:0)

math.sin()math.cos()采用Radians而不是度数的角度。

numpy.sin()numpy.cos()

的情况也是如此
>>> import math
>>> math.sin(90)
0.8939966636005579
>>> math.sin(1.57)
0.9999996829318346

您可以看到math.sin(90)应为1,但我们得到0.89。但是math.sin(1.57)给出了正确的答案,因为90度是弧度的1.57。

这是一个WEBSITE,可以解释弧度< - >度之间的转换。