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
猜你喜欢
- 1、说明拼接文件路径,可以有多个参数。2、语法os.path.join(path1,path2,*)path1 初始路径。path2 需要拼
- 一、原型模式原型是相对于复制、克隆而言的,但是不同于模板,模板创造出的东西是一模一样,而原型创造出的东西是允许存在差异化和个性化的。原型模式
- asp连接mysql的问题ASP连接Mysql数据库的问题。下了一个MySql 的ODBC驱动。做了个小测试。顺利通过。先记录下来,中间还有
- 以下代码已经在SQLServer2008上的示例数据库测试通过问题一:如何为数据进行加密与解密,避免使用者窃取机密数据? 对于一些敏感数据,
- Array()CInt()CStr() Date() DateAdd() Day() FormatCurrency() FormatDate
- xpath表达式1. xpath语法<bookstore><book> <title lang="e
- 题目:轮盘分为三部分: 一等奖, 二等奖和三等奖;轮盘转的时候是随机的,如果范围在[0,0.08)之间,代表一等奖,如果范围在[0.08,0
- 一个网站信息结构需要表现给用户看,这样用户才能知道当前是在哪儿,才有可能去猜测某个内容可能会在哪儿。如何表现网站的信息结构给用户呢?用导航。
- 本文实例讲述了python网络编程之读取网站根目录的方法,分享给大家供大家参考。具体实现方法如下:import socket, sys po
- 前言快520了,咱们来玩玩五子棋陶冶情操。快拿这个和你女朋友去对线。(分了别来找我哇)。多的不说直接进入正题人人对战游戏规则:p1为黑子,p
- 从98年某月某日我的第一个个人猪页诞生.到2008年的今天.宣告了我从事设计行业整整十年.十年,很多变化,从摆弄个人猪页到现在以做设计为生,
- 开门见山,直接以例子介绍: 代码如下:CREATE TABLE [dbo].[course]( [id] [int] NULL,
- 本文列举了兼容 IE 和 FF 的换行 CSS 推荐样式,详细介绍了word-wrap同word-break的区别。兼容 IE 和 FF 的
- 格式请使用 gif 或 jpg 或swf (flash)同一组广告请使用一种格式。命名命名方式:宽x高.图片格式x 必须小写 ; 图片格式
- 功能描述:打开一个网站的网页,过5分钟不动作,就会锁定页面,隐藏内容容器,显示一个容器用于输入密码,输入正确的密码来解锁。锁定后即使用户刷新
- 前言接口在面向对象编程中是经常使用的招式,也是体现多态很重要的手段。是的。Golang中也有接口这玩意儿。1.为什么需要接口?多数情况下,数
- 登陆页login.asp:<% if request.Form.count>0 then ses
- 本文实例讲述了Python实现的服务器。分享给大家供大家参考,具体如下:python - 单进程服务器#coding=utf-8from s
- 中文分词(Chinese Word Segmentation),将中文语句切割成单独的词组。英文使用空格来分开每个单词的,而中文单独一个汉字
- 新闻系统、blog系统等都可能用到将动态页面生成静态页面的技巧来提高页面的访问速度,从而减轻服务器的压力,本文为大家搜集整理了ASP编程中常