Python实现arctan换算角度的示例

 更新时间:2023年03月13日 15:21:49   作者:斐硕人  
本文主要介绍了Python实现arctan换算角度的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

笛卡尔坐标系

对于平面坐标系,任一射线OP与x轴夹角θ的范围,可以取[0,2π)或者(-π,π],如无特殊说明, 我们统一使用后者。
将笛卡尔空间坐标系中的点 Pc = ( x , y , z ) 表示成球体坐标系中的形式 Ps = ( θ , ϕ , r )

球坐标

其中

球坐标定义

根据球坐标的定义,要求θ∈[−π,π],ϕ∈[−π/2,π/2] ,r∈[0 , +∞)

对于 θ,正切函数的周期是 π,因此反正切函数 arctan 一般也只取一个周期,其定义域是 R,值域是(−π/2 , π/2) 。为了解决这个问题,引入了 Arctan 函数,也就是 arctan2 函数。

arctan2定义

atan2 函数的使用 atan2(delta_y , delta_x)

import math
a = math.atan2(400,-692.820)
# 2.6179936760992044
angle = a/math.pi*180
# 149.99998843242386

atan 函数的使用 atan(delta_y / delta_x)

import math
delta_y = 400
delta_x = -692.820

if delta_x == 0:
    b = math.pi / 2.0
    angle = b/math.pi*180
    if delta_y == 0:
        angle = 0.0
    elif delta_y < 0:
        angle -= 180
else:
    b =  math.atan(delta_y/delta_x) 
    angle = b/math.pi*180
    if delta_y > 0 and delta_x < 0:
        angle = angle + 180
    if delta_y < 0 and delta_x < 0:
        angle = angle - 180

b,angle
# (-0.5235989774905888, 149.99998843242386)

atan 和 atan2 的异同

  • 参数的个数不同
  • 两者返回值都是弧度
  • 如果 delta_x等于0,atan2依然可以计算,但是 atan 则需要提前判断,否则就会导致程序出错
  • 象限的处理

四象限

atan2(b,a)是4象限反正切,它的取值不仅取决于正切值b/a,还取决于点(b,a) 落入哪个象限:

  • 当点 (b,a) 落入第一象限(b>0, a>0)时,atan2(b,a)的范围是 0 ~ pi/2
  • 当点 (b,a)落入第二象限(b>0, a<0)时,atan2(b,a)的范围是 pi/2 ~ pi
  • 当点 (b,a)落入第三象限(b<0, a<0)时,atan2(b,a)的范围是 -pi~-pi/2
  • 当点 (b,a) 落入第四象限(b<0, a>0)时,atan2(b,a)的范围是 -pi/2~0

而 atan(b/a) 仅仅根据正切值为a/b求出对应的角度 (可以看作仅仅是2象限反正切):

  • 当 b/a > 0 时,atan(b/a)取值范围是 0 ~ pi/2
  • 当 b/a < 0 时,atan(b/a)取值范围是 -pi/2~0

取值范围

arctan2

二三象限角度

  • 点 (b,a) 落入第一象限 (b>0, a>0)第四象限(b<0, a>0)时,atan2(b,a) = atan(b/a)
  • 点 (b,a) 落入第二象限 (b>0, a<0),b/a<0,故atan(b/a)取值范围始终是 -pi/2~0,然而,atan2(b,a)的范围是 pi/2 ~ pi,故atan(b/a) 计算角度值要加180。
  • 点 (b,a) 落入第三象限(b<0, a<0) ,b/a>0,故 atan(b/a) 取值范围是 0 ~ pi/2,而此时atan2(b,a)的范围是 -pi~-pi/2,故atan(b/a) 计算角度值要减180。

结论: atan 和 atan2函数,建议用 atan2函数

到此这篇关于Python实现arctan换算角度的示例的文章就介绍到这了,更多相关Python arctan换算角度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何使用Python+ChatGPT批量生成论文

    如何使用Python+ChatGPT批量生成论文

    这篇文章主要介绍了用Python+ChatGPT批量生成论文,我用python+GPT-3 API开发了一个工具,可以直接从arxiv地址生成论文概述,需要的朋友可以参考下
    2023-02-02
  • 详解python分布式进程

    详解python分布式进程

    在本专题里,小编给大家讲述了关于python分布式进程的相关知识点内容,需要的朋友们参考下。
    2018-10-10
  • python中引用和赋值的区别及说明

    python中引用和赋值的区别及说明

    在Python中,引用和赋值操作有明显区别,引用相当于别的语言中的“指针”,多个引用指向同一个对象,修改对象会影响所有引用,而赋值则创建新的对象,原对象的修改不会影响新对象,引用适用于传递大型对象,节省内存;赋值则适用于保证对象独立性
    2024-09-09
  • Python内省与反射巧妙运用示例

    Python内省与反射巧妙运用示例

    这篇文章主要为大家介绍了Python内省与反射巧妙运用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Pandas中Series的属性,方法,常用操作使用案例

    Pandas中Series的属性,方法,常用操作使用案例

    这篇文章主要介绍了Pandas中Series的属性,方法,常用操作使用案例,文章通过包的引入展开主题,需要的朋友可以参考一下
    2022-07-07
  • Python Pickle 实现在同一个文件中序列化多个对象

    Python Pickle 实现在同一个文件中序列化多个对象

    今天小编就为大家分享一篇Python Pickle 实现在同一个文件中序列化多个对象,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python 如何读取列表中字典的value值

    python 如何读取列表中字典的value值

    这篇文章主要介绍了python 如何读取列表中字典的value值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • python中列表元素连接方法join用法实例

    python中列表元素连接方法join用法实例

    这篇文章主要介绍了python中列表元素连接方法join用法,实例分析了Python中join方法的使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • Python协程原理全面分析

    Python协程原理全面分析

    协程(co-routine,又称微线程、纤程)是一种多方协同的工作方式。协程不是进程或线程,其执行过程类似于Python函数调用,Python的asyncio模块实现的异步IO编程框架中,协程是对使用async关键字定义的异步函数的调用
    2023-02-02
  • 最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程

    最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程

    这篇文章涵盖了最新版PyCharm安装教程,最新版PyCharm永久激活码教程,PyCharm官方中文(汉化)版安装教程图文并茂非常详细,需要的朋友可以参考下
    2020-11-11

最新评论