【问题标题】:Sin and Cos function incorrect in python [duplicate]python中的Sin和Cos函数不正确[重复]
【发布时间】:2015-02-28 10:31:59
【问题描述】:

我正在尝试在 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。我可能只是犯了一个愚蠢的错误,但谁能告诉我我做错了什么。 谢谢 异形

【问题讨论】:

  • 数学函数需要弧度而不是度数。使用math.radians 将度数转换为弧度。

标签: python math pygame


【解决方案1】:

math.sinmath.cos等在radians中取角。

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

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

你可以像这样在发布的 sn-p 中修复它:

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))

但是我建议在任何地方都使用弧度。

【讨论】:

  • 打败我。 :)。但是为这个家伙添加一些代码,获得这些积分......
  • 将角度乘以 (pi/180)
【解决方案2】:

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,它解释了弧度度数之间的转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    相关资源
    最近更新 更多