英文:
how to map atan2() to only positive radian?
问题
atan2(y, x)
在 PI (180°) 处存在不连续性,切换到 -PI 到 0 (-180° 到 0°),顺时针方向。
如果我应用来自 此链接 的解决方案:
(y.atan2(x).to_degrees() + 360.0) % 360.0
对于弧度不完全适用:
(y.atan2(x) + PI*2.0) % PI*2.0 // 大多数情况下都不能给出正确的输出
我可能做错了什么,因为我不擅长数学,所以我错过了什么?
英文:
atan2(y, x)
has that discontinuity at PI (180°) where it switches to -PI..0 (-180°..0°) going clockwise.
if i apply the solution from this
// rust
(y.atan2(x).to_degrees() + 360.0) % 360.0
doesn't quite work with radians
(y.atan2(x) + PI*2.0) % PI*2.0 // doesn't give the right output most of the times
i am probably doing it wrong, cause i am not good at math
so what am i missing?
答案1
得分: 1
问题在于取模运算符和乘法具有相同的优先级,并且都是左关联的,因此您的最后一个表达式等同于
((y.atan2(x) + PI*2.0) % PI) * 2.0
如果您在第二个 PI*2.0
周围加上括号,它应该可以工作:
(y.atan2(x) + PI*2.0) % (PI*2.0)
英文:
The problem is that the modulo operator and multiplication have the same precedence, and are left-associative, so your last expression is equivalent to
((y.atan2(x) + PI*2.0) % PI) * 2.0
If you put parentheses around the second PI*2.0
, it should work:
(y.atan2(x) + PI*2.0) % (PI*2.0)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论