【问题标题】:Python: Find the degree of the Angle [0:360] from cos(a) and sin(a) valuesPython:从 cos(a) 和 sin(a) 值中找到角度 [0:360] 的度数
【发布时间】:2020-04-06 12:24:51
【问题描述】:

我想找到我的角度在0360 之间的度数。 我有一个包含 2 列的 DataFrame:cossin 值。

df['cos'] = vector values between 0 and 1

df['sin'] = vector values between 0 and 1

【问题讨论】:

    标签: python trigonometry


    【解决方案1】:

    我猜你的意思是这样的:

    import math
    
    angle = math.degrees(math.acos(df['cos']))
    
    

    要真正保持在 [0, 360] 中,您必须检查负 cos 并调整代码,例如:

    import math
    a_acos = math.acos(df['cos'])
    if df['sin'] < 0:
       angle = math.degrees(-a_acos) % 360
    else: 
       angle = math.degrees(a_acos)
    

    【讨论】:

      【解决方案2】:

      不要搞乱签名检查。 你需要cossin

      import math
      for i in range(360):
         angle = i * math.pi / 180
         cs = math.cos(angle)
         sn = math.sin(angle)
         angle2 = math.atan2(sn, cs)  # ALWAYS USE THIS
         angle2 *= 180 / math.pi
         if angle2 < 0: angle2 += 360
         print(angle2)
      

      【讨论】:

      • 这是正确答案。顺便说一句,numpy.arctac2() 的工作方式也一样。
      【解决方案3】:

      最好的方法是使用np.angle 函数,该函数返回与复数关联的“角度”。理论上来说,任何复数z 的大小为r,角度为theta,由下式给出

      z = r*cos(theta) + 1j * r*sin(theta)
      

      np.angle 将一个复数作为输入,并以弧度返回从 $-pi$ 到 $pi$ 的角度(对应于 -180 到 180 度)。这意味着你要找的基本上就是这个

      angle_negpi_to_pi = np.angle(df['cos'] + 1j*df['sin'])
      angle = ((angle_negpi_to_pi + 2*np.pi) % (2*np.pi)) * 180/np.pi
      

      【讨论】:

        【解决方案4】:

        您可以使用 numpy 模块,其中包含适用于矢量的三角函数,例如 arcsinarccos,它们采用 sin 和 cos 值并返回角度。您可以使用degrees 函数将弧度转换为度数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多