马黑黑 发表于 2022-8-29 12:47

探索 atan2 的应用

本帖最后由 马黑黑 于 2022-8-29 12:50 编辑

atan2 函数将指定的直角坐标(x,y)转换为极坐标(r,θ),并返回弧度θ。换言之,该方法通过计算 y/x 的反正切值来计算弧度θ。

举例说明:针对一个矩形元素,设(x,y)为该元素上的任意一个点,则该点的弧度 θ 为:

    θ = atan2(y,x)

改装上述式子,求得(x,y)点的角度,则:

    a = atan2(y,x)* 180 / π

上式 a 所得到的是以矩形左上角(0,0)为基点,(x,y)与(0,0)连线后与矩形的上边线所形成的夹角。

依此推算,矩形上的任意一个坐标点,通过 atan2 函数所获得的与矩形上边线形成的夹角是基于始坐标(0,0)的夹角,最大角度为 90 度。现实应用中,例如我们要做一个圆环可控进度,我们需要 360 度,所以,我们需要移动始坐标即夹角的基点到矩形的中心来,这样能将矩形一分为四,90 * 4 = 360。这时,弧度 θ求值式子为(假设矩形尺寸为200*200):


    θ = atan2(y - 100,x - 100)

变换为夹角 a 的求值式子则是:

    a = atan2(y - 100,x - 100)* 180 / π

这个时候,夹角 a 的值出现怪异的现象:矩形的右上区域和左上区域,即上半部分,获得的夹角都是负值。原理却不复杂:基点不再位于矩形的左上角坐标(0,0)处,而是移动到了(100,100)即矩形的中心点,也就是坐标系整体迁移了,矩形的上半部在横向坐标之上, atan2 计算其上的(x,y)弧度是逆向走向,故为负值,且负值的规律又与纵向坐标有关,即左上方区域和右上方的区域各有规律。

以上探索结果,可以用于制作圆环可控进度的示意器,详情请查看本栏目的另一个帖子:

进度可调+透明遮罩的圆环播放器 - 马黑黑教程专版 - 花潮论坛 - Powered by Discuz! (huachaowang.com)


加林森 发表于 2022-8-29 20:16

有点烧脑。我慢慢理解吧。

马黑黑 发表于 2022-8-29 20:47

加林森 发表于 2022-8-29 20:16
有点烧脑。我慢慢理解吧。

这个至少需要高三数学基础

加林森 发表于 2022-8-29 20:50

马黑黑 发表于 2022-8-29 20:47
这个至少需要高三数学基础

哦。我初中毕业就下乡了。{:4_189:}

红影 发表于 2022-8-29 21:24

atan2 函数将指定的直角坐标(x,y)转换为极坐标(r,θ),并返回弧度θ。
不返回r值的么?

红影 发表于 2022-8-29 21:33

上半部分,获得的夹角都是负值。
这句比较费解,基点移动到矩形中心后,应该在新参照系下,一三象限为正,二四象限为负才对。

马黑黑 发表于 2022-8-29 21:50

本帖最后由 马黑黑 于 2022-8-30 07:25 编辑

红影 发表于 2022-8-29 21:33
上半部分,获得的夹角都是负值。
这句比较费解,基点移动到矩形中心后,应该在新参照系下,一三象限为正, ...
这是 atan2 的特性,调整坐标系后,它在一二象限(上方)是负,在三四象限(下方)是正。看图:





马黑黑 发表于 2022-8-29 21:55

加林森 发表于 2022-8-29 20:50
哦。我初中毕业就下乡了。

基础知识不够

加林森 发表于 2022-8-29 21:55

马黑黑 发表于 2022-8-29 21:55
基础知识不够

是啊。特别是数学最差。

马黑黑 发表于 2022-8-29 21:57

红影 发表于 2022-8-29 21:24
atan2 函数将指定的直角坐标(x,y)转换为极坐标(r,θ),并返回弧度θ。
不返回r值的么?

这个不需要半径参与。你要知道,与横向坐标构成夹角的线,它的任意一个 (x,y) 坐标点上,y/x 的值是相同的,无需获知半径。

马黑黑 发表于 2022-8-29 21:58

加林森 发表于 2022-8-29 21:55
是啊。特别是数学最差。

发展不全面不平衡

加林森 发表于 2022-8-29 22:01

马黑黑 发表于 2022-8-29 21:58
发展不全面不平衡

没有办法啊,文化大革命就是这样玩的。

马黑黑 发表于 2022-8-29 22:02

加林森 发表于 2022-8-29 22:01
没有办法啊,文化大革命就是这样玩的。

关键还是是自己吧,大革命小革命时期,都会有人埋头读书

加林森 发表于 2022-8-29 22:36

马黑黑 发表于 2022-8-29 22:02
关键还是是自己吧,大革命小革命时期,都会有人埋头读书

我是黑五类,敢不听话吗?不过我自己偷偷在学习的。

马黑黑 发表于 2022-8-29 22:49

加林森 发表于 2022-8-29 22:36
我是黑五类,敢不听话吗?不过我自己偷偷在学习的。

不错的

加林森 发表于 2022-8-29 22:59

马黑黑 发表于 2022-8-29 22:49
不错的

嗯嗯。真不容易的。

马黑黑 发表于 2022-8-29 23:06

加林森 发表于 2022-8-29 22:59
嗯嗯。真不容易的。

是的

加林森 发表于 2022-8-29 23:18

马黑黑 发表于 2022-8-29 23:06
是的

我慢慢学习好不好!谢谢你!

马黑黑 发表于 2022-8-29 23:53

加林森 发表于 2022-8-29 23:18
我慢慢学习好不好!谢谢你!

知识点抽象,能用就行

加林森 发表于 2022-8-29 23:58

马黑黑 发表于 2022-8-29 23:53
知识点抽象,能用就行

嗯嗯。好的好的。今天头有点晕了,我准备休息了。老黑也早点休息哦。
页: [1] 2 3
查看完整版本: 探索 atan2 的应用