文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

torch.atan2函数详细解答

2023-09-03 12:31

关注

arctan实际上是用来计算点(x,y)组成的向量,与x轴的弧度的,是tan的反函数,推导如下,α为弧度

y/x=\tan \alpha

\mathrm{arc}\tan \left( y/x \right) =\alpha

 y=arctan(x)其图像如下 y为弧度,x为任意值,这里不是指上面的坐标x,y

但这种弧度计算方式是有缺陷的,比如

我想区分如下图A、B两点的弧度,如果AB弧度都是

\alpha =\mathrm{arc}\tan \left( -3/4 \right) =\mathrm{arc}\tan \left( 3/-4 \right)

那么就无法区分开了,也就是虽然x,y有确定的唯一弧度,但同一个弧度会有两个刚好相反的向量指向,比如图中从原点到A和B的两条向量,不能唯一表示一个方向,这也就是atan2解决的东西 

作用:计算一组点计算点(x,y)组成的向量的弧度,该弧度是与x轴正方向的弧度(这是与传统arctan的唯一区别)

 torch.atan2(input, other, *, out=None) → Tensor

在三角函数中,atan2是反正切函数的一个变种,有两个变数,主要是提供给计算机编程语言一个简便的弧度计算方式,其定义为:

此时的atan2函数的图像如下,y为弧度,x为任意值

此时指定弧度有了唯一的象限,同一个弧度不会再出现有两条相反方向向量的情况了。

 此时A点的弧度=B的弧度+π,二者的弧度不再相等了,此时弧度相同,因为计算的是与x轴正半轴的弧度,也就是此时确定弧度可以唯一确定一个向量。

 torch.atan2的用法和结果验证

import torchimport numpy as npfrom math import pix= torch.tensor([1,2,1])y= torch.tensor([0,pi,2])result=torch.atan2(y,x)print(result)print(np.arctan(pi/2))

tensor([0.0000, 1.0039, 1.1071])
1.0038848218538872

y为input,x为other,arctan(y[0]/x[0]),0=arctan(0/1)

0039=arctan(pi/2)

 torch.atan2对于三维空间的使用

在sphere former中,作者使用了如下的网络结构,将xyz转换为(θ,β,radius)的形式,该形式可以唯一地表示一个点。

def cart2sphere(xyz):    '''    将xyz坐标转化为弧度坐标[theta, beta, r]    Args:        xyz:    Returns:[theta, beta, r],y与x轴的夹角theta,xy平面上的投影与    '''    x, y, z = xyz[:, 0], xyz[:, 1], xyz[:, 2]    #計算該點於x軸正方向的弧度    theta = (torch.atan2(y, x) + np.pi) * 180 / np.pi #將弧度值都變爲正值,最後變成角度值,theta 0-360。    # 計算該點於z軸正方向的弧度    beta = torch.atan2(torch.sqrt(x**2 + y**2), z) * 180 / np.pi #轉換結果爲角度,第一项永远为正数,也就是y大于0,因此结果y永远为正数 0~180,    r = torch.sqrt(x**2 + y**2 + z**2)#r是半徑    return torch.stack([theta, beta, r], -1) 

为什么该形式可以唯一表示一个点呢?

首先,(x,y,z)可以唯一确定1组(θ,β,radius),通过上述代码,(x,y,z)可以得到唯一的一组确定的解。

我们进行分析是否有可能一个(θ,β,radius)可以映射到两个讲过0点的向量(x,y,z)上,

点(x,y,z)可以看做是三个向量x,y,z的合成

theta = (torch.atan2(y, x) + np.pi) * 180 / np.pi

 torch.atan2(y, x)就是上面提到的,一个θ有确定的一个x,y向量。

beta = torch.atan2(torch.sqrt(x**2 + y**2), z) 

该行代码可以计算该点torch.sqrt(x**2 + y**2)(永远在第一、二象限)和z组成的向量与z轴正方向的弧度,因为z在第二个参数位置上,所以是以z轴为正方向。

 也就是x轴现在变为torch.sqrt(x**2 + y**2)/z,y轴变为β,torch.sqrt(x**2 + y**2)永远大于0(图上就是y>0),也就是只有其大于0的部分,对应了这两条曲线,也就是β确定,torch.sqrt(x**2 + y**2)/z唯一确定,如下图,由于torch.sqrt(x**2 + y**2)恒大于0,并不会出现两条完全相反的向量,因此不会出现1个弧度对应两个向量的问题。

 再在该平面上画半径,只有唯一的交点。

也就是θ确定x、y平面上的方向,β确定z,(x+y)平面的方向,半径确定该x,y,z方向上的唯一点。

附:角度与弧度的关系

弧度角度转换

2*pi=2*pi*180°/pi=2*180°=360°

arctan是tan的反函数,而不是倒数的关系

来源地址:https://blog.csdn.net/zxyOVO/article/details/130086322

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯