探索 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
这个至少需要高三数学基础
哦。我初中毕业就下乡了。{:4_189:} atan2 函数将指定的直角坐标(x,y)转换为极坐标(r,θ),并返回弧度θ。
不返回r值的么? 上半部分,获得的夹角都是负值。
这句比较费解,基点移动到矩形中心后,应该在新参照系下,一三象限为正,二四象限为负才对。 本帖最后由 马黑黑 于 2022-8-30 07:25 编辑
红影 发表于 2022-8-29 21:33
上半部分,获得的夹角都是负值。
这句比较费解,基点移动到矩形中心后,应该在新参照系下,一三象限为正, ...
这是 atan2 的特性,调整坐标系后,它在一二象限(上方)是负,在三四象限(下方)是正。看图:
加林森 发表于 2022-8-29 20:50
哦。我初中毕业就下乡了。
基础知识不够 马黑黑 发表于 2022-8-29 21:55
基础知识不够
是啊。特别是数学最差。 红影 发表于 2022-8-29 21:24
atan2 函数将指定的直角坐标(x,y)转换为极坐标(r,θ),并返回弧度θ。
不返回r值的么?
这个不需要半径参与。你要知道,与横向坐标构成夹角的线,它的任意一个 (x,y) 坐标点上,y/x 的值是相同的,无需获知半径。 加林森 发表于 2022-8-29 21:55
是啊。特别是数学最差。
发展不全面不平衡 马黑黑 发表于 2022-8-29 21:58
发展不全面不平衡
没有办法啊,文化大革命就是这样玩的。 加林森 发表于 2022-8-29 22:01
没有办法啊,文化大革命就是这样玩的。
关键还是是自己吧,大革命小革命时期,都会有人埋头读书 马黑黑 发表于 2022-8-29 22:02
关键还是是自己吧,大革命小革命时期,都会有人埋头读书
我是黑五类,敢不听话吗?不过我自己偷偷在学习的。 加林森 发表于 2022-8-29 22:36
我是黑五类,敢不听话吗?不过我自己偷偷在学习的。
不错的 马黑黑 发表于 2022-8-29 22:49
不错的
嗯嗯。真不容易的。 加林森 发表于 2022-8-29 22:59
嗯嗯。真不容易的。
是的 马黑黑 发表于 2022-8-29 23:06
是的
我慢慢学习好不好!谢谢你! 加林森 发表于 2022-8-29 23:18
我慢慢学习好不好!谢谢你!
知识点抽象,能用就行 马黑黑 发表于 2022-8-29 23:53
知识点抽象,能用就行
嗯嗯。好的好的。今天头有点晕了,我准备休息了。老黑也早点休息哦。