首页 文章

如何将atan2()与其他Radian角度系统结合使用

提问于
浏览
4

我在JavaScript中苦苦挣扎,但这个问题也适用于许多其他语言/环境 .

我想让一个物体朝另一个物体的位置旋转,我使用:

atan2(obj1.dy, obj1.dx) - obj2.getRotation()

检查第二个物体是否应在给定时间顺时针或逆时针旋转 .

在我正在使用的JS / HTML5 / Canvas编程环境的KineticJS中,角度以0到2 pi的弧度指定,从正Y轴开始并顺时针方向 . 在许多其他编程环境中也可以看到此行为 .

但是,当使用 Math.atan2(y,x) 函数计算第二个对象的移动角度时,角度从-pi到pi指定,从正X轴开始,逆时针方向 .

澄清:

Difference between normal radians and atan2()

问题:

How can I calculate an angle in normal radians from the result of the atan2() function?

3 回答

  • 2

    如果希望角度从y轴上的0顺时针增加,请将角度计算为atan2(x,y) . 然而,这给出x <0的负角度,所以在这种情况下你应该加2 * pi .

  • 2

    两种情况下的值都相同,模数为 2*PI ,并且可以调整不同的符号和偏移约定 . 伪代码:

    theta = 0.5*M_PI - atan2(y, x); // adjust for required sign/offset
    theta = fmod(theta, 2.0*M_PI);  // make result modulo 2*PI
    
  • 1

    如果你的结果介于0和Pi之间,那么结果非常简单 . 如果你的结果在-Pi和0之间,那么在你的结果中添加2 * Pi,这样你的结果将是0,2 * Pi的间隔 .

    当然,如果你为这种类型的转换实现一个单独的函数,不要偶尔复制你的代码,那将是很好的 .

相关问题