Python实现arctan换算角度的示例
作者:斐硕人 发布时间:2023-07-16 20:31:28
笛卡尔坐标系
对于平面坐标系,任一射线OP与x轴夹角θ
的范围,可以取[0,2π)或者(-π,π],如无特殊说明, 我们统一使用后者。
将笛卡尔空间坐标系中的点 Pc = ( x , y , z )
表示成球体坐标系中的形式 Ps = ( θ , ϕ , r )
。
其中
根据球坐标的定义,要求θ∈[−π,π],ϕ∈[−π/2,π/2] ,r∈[0 , +∞)
。
对于 θ
,正切函数的周期是 π,因此反正切函数 arctan 一般也只取一个周期,其定义域是 R,值域是(−π/2 , π/2) 。为了解决这个问题,引入了 Arctan 函数,也就是 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
取值范围
点 (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函数
来源:https://blog.csdn.net/feishuoren/article/details/120763658


猜你喜欢
- 目录迭代器生成器总结迭代器聊迭代器前我们要先清楚迭代的概念:通常来讲从一个对象中依次取出数据,这个过程叫做遍历,这个手段称为迭代(重复执行某
- java的简单介绍Java是一种通用的面向对象编程语言,旨在生成可在任何地方使用相同代码的代码。这种编程语言是基于类的,面向对象的和人类可读
- 今天弄了一天,总算把win2003下的问题给解决了, LoadModule php5_module E:\server\php528\php
- 加载相关库import randomimport seaborn as snsimport matplotlib.pyplot as plt
- FileField中的upload_to属性可以设定上传文件的存储目录和名称,它可以是个字符串,也可以是个callable,比如一个方法。当
- Index.asp:程序代码<html><head><meta http-equiv="Conten
- 分析古诗文网站下图1展示了古诗文网站—》诗文 栏目的首页数据。该栏目的地址是:https://so.gushiwen.cn/shiwens/
- 关于保存h5模型、权重网上的示例非常多,也非常简单。主要有以下两个函数:1、keras.models.load_model() 读取网络、权
- python pip安装的包放在哪里使用 pip list 查看已安装的包名然后用 pip show 包名,就可以看到安装到哪了通常安装在p
- 滑动验证码介绍本篇涉及到的验证码为滑动验证码,不同于极验证,本验证码难度略低,需要的将滑块拖动到矩形区域右侧即可完成。这类验证码不常见了,官
- javascript中给数组加元素是一个非常简单的问题,javascript本身就提供了大量这类函数,我们可以使用js自带函数快速给数组增加
- 这篇文章主要介绍了Python如何实现强制数据类型转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 本文实例讲述了python递归计算N!的方法。分享给大家供大家参考。具体实现方法如下:def factorial(n): if
- 背景图像滤波的作用简单来说就是将一副图像通过滤波器得到另一幅图像;明确一个概念,滤波器又被称为卷积核,滤波的过程又被称为卷积;实际上深度学习
- 多的不说,看了代码就懂了!df = pd.DataFrame ({'a' : np.random.randn(6), &nb
- 大家可以在Github上clone全部源码。Github:https://github.com/williamzxl/Scrapy_Craw
- SQL Server四类数据仓库建模的方法主要分为以下四类。第一类是关系数据库的三范式建模,通常我们将三范式建模方法用于建立各种操作型数据库
- 导语哈喽!我是木木子,又到了今日更新时刻!我们来看看写什么呢?小编有个好兄弟最近在追妹子,跟妹子打得火热!就差临门一脚了,这一jio我帮忙补
- 什么是随机数随机数并不意味着每次都有不同的数字。随机意味着无法在逻辑上预测的事物。伪随机和真随机计算机在程序上工作,程序是权威的指令集。因此
- 1.下载Linux对应的RPM包http://dev.mysql.com/downloads/mysql/5.6.htmlwget http