atan2(y, x)
在 180° 处有不连续性,顺时针方向切换到 -180°..0°。
如何将值范围映射到 0°..360°?
这是我的代码:
CGSize deltaPoint = CGSizeMake(endPoint.x - startPoint.x, endPoint.y - startPoint.y);
float swipeBearing = atan2f(deltaPoint.height, deltaPoint.width);
我正在计算滑动触摸事件的方向startPoint
and endPoint
,两个 XY 点结构。该代码适用于 iPhone,但支持任何语言atan2f()
会做。
使用模数的解决方案
一个捕获所有情况的简单解决方案。
degrees = (degrees + 360) % 360; // +360 for implementations where mod returns negative numbers
解释
正数:1 到 180
如果将 1 到 180 之间的任何正数除以 360,您将得到与输入的完全相同的数字。此处的 Mod 只是确保这些正数以相同的值返回。
负值:-180 至 -1
此处使用 mod 将返回 180 到 359 度范围内的值。
特殊情况:0 和 360
使用 mod 意味着返回 0,这使其成为安全的 0-359 度解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)