任务很简单:有两个值指定初始b和最终e角度位置,找出最小旋转角度(即不超过 180 度)及其方向。初始角度以实变量的度数指定。范围[0.0 ... 360.0)。
原则上,解决方案也很简单:
- 从结尾减去开头:
d = e - b; - 如果
abs(d) > 180,那么r = d - sign(d) * 360 - 否则
r = d
r- 所需转弯,其中符号指定方向:+- 顺时针,-- 逆时针。
例子:
b = 350, e = 10 => r = +20b = 100, e = 0 => r = -100
问题是:是否可以在第2步避免分支,同时保证算法在任何角度值的效率,考虑到相等性a = a + n * 360,n任何整数在哪里?大概三角函数可以在这里提供帮助。
好吧,由于您的角度值在 -360 到 +360 的范围内,因此
(угол + 360.0)/360.0将小数部分乘以 360 ...您可以添加 720 - 只是为了确定 :)而且,我看的更仔细了——你需要稍后把它带到 (-180; +180) 吗?好吧添加
嗯,即 在 C/C++ 中
“我想是的”(c)维尼