将atan2()映射为仅正弧。

huangapple go评论55阅读模式
英文:

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)

huangapple
  • 本文由 发表于 2023年6月8日 22:19:45
  • 转载请务必保留本文链接:https://go.coder-hub.com/76432826.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定