【问题标题】:Making a vector library in python, but my heading() function has a problem with the atan2 function在python中制作向量库,但是我的heading()函数与atan2函数有问题
【发布时间】:2020-08-08 06:59:50
【问题描述】:

我正在为 python 制作一个向量库(我对 python 很陌生),我正在制作一个函数来查找向量的标题。这是它的代码。 (顺便说一句,我对所有这些都使用弧度)。

def heading(self):
    return math.atan2(self.x, self.y)

我知道这是坏的,因为当我运行我的 setHeading 函数(我已经测试过,它工作正常)来设置向量的标题时,获取标题会返回一个不同的值。我在谷歌上查看它有什么问题,它说 python math.atan2 函数返回一个介于 -PI 和 PI 之间的值。好的,我在退货时添加 PI。还是不行。我该如何解决这个问题?

编辑:我被要求将 setHeading 函数也放在这里。

 def setHeading(self, a):
    if type(a) == int or type(a) == float:
        self.x = math.cos(a) * self.mag()
        self.y = math.sin(a) * self.mag()
    else:
        print("Vector2.setHeading() only takes a float or an int")

【问题讨论】:

  • atan2 计算“平面中从原点到点 (x, y) 的向量与正 X 轴形成该角度”。如果不是正 X 轴,您使用的角度参考是什么参考?
  • 您能展示一下setHeading 的实现吗?我了解您认为它“工作正常”,但它可能是根据与 atan2 工作的不同期望这样做的。
  • 如果您需要一个介于 0 和 2*pi 之间的角度,那么您可以将 2*pi 添加到 atan2 返回的小于零的角度。
  • @DarrylG 0 度沿 x 轴,如果这就是您要问的。
  • @KarlKnechtel 在编辑中添加了它

标签: python angle atan2


【解决方案1】:

问题是您在标题函数中的atan2 调用中颠倒了 x 和 y

atan2 函数签名:

math.atan2(y, x)¶

因此,将航向函数定义更改为:

def heading(self):
    return math.atan2(self.y, self.x)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    相关资源
    最近更新 更多