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

问题描述 投票:6回答:4

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

我想让一个对象旋转到另一个对象的位置,并且使用:

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

检查第二个对象在给定的时间是否应该顺时针或逆时针旋转。

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

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

澄清:

“正常弧度与atan2之间的差异()

问题:

我如何从atan2()函数的结果中以正常弧度计算角度?

math angle radians atan2
4个回答
3
投票

如果要使角度从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的间隔出现。]

当然,如果您为此类型的转换实现一个单独的函数,不时不重复代码,那将是很好的。


0
投票

只需使用条件

© www.soinside.com 2019 - 2024. All rights reserved.