我在JavaScript中苦苦挣扎,但这个问题也适用于许多其他语言/环境 .
我想让一个物体朝另一个物体的位置旋转,我使用:
atan2(obj1.dy, obj1.dx) - obj2.getRotation()
检查第二个物体是否应在给定时间顺时针或逆时针旋转 .
在我正在使用的JS / HTML5 / Canvas编程环境的KineticJS中,角度以0到2 pi的弧度指定,从正Y轴开始并顺时针方向 . 在许多其他编程环境中也可以看到此行为 .
但是,当使用 Math.atan2(y,x) 函数计算第二个对象的移动角度时,角度从-pi到pi指定,从正X轴开始,逆时针方向 .
澄清:
问题:
How can I calculate an angle in normal radians from the result of the atan2() function?
3 回答
如果希望角度从y轴上的0顺时针增加,请将角度计算为atan2(x,y) . 然而,这给出x <0的负角度,所以在这种情况下你应该加2 * pi .
两种情况下的值都相同,模数为
2*PI
,并且可以调整不同的符号和偏移约定 . 伪代码:如果你的结果介于0和Pi之间,那么结果非常简单 . 如果你的结果在-Pi和0之间,那么在你的结果中添加2 * Pi,这样你的结果将是0,2 * Pi的间隔 .
当然,如果你为这种类型的转换实现一个单独的函数,不要偶尔复制你的代码,那将是很好的 .