Libgdx 两点间度数计算

Par*_*r C 3 rotation formula points degrees libgdx

在这里,我正在计算演员和触摸点之间的度数,并将这个度数作为旋转角度传递给演员。我希望演员应该指向手指触摸或手指拖动方向。(考虑我正在通过手指触摸和拖动在路上拉公共汽车)

float degrees = (float) ((Math.atan2(touchPoint.x - crocodile.position.x, -(touchPoint.y - crocodile.position.y)) * 180.0d / Math.PI));
Run Code Online (Sandbox Code Playgroud)

其计算度正确。只是有时介于两者之间的程度略有不同。所以当结果与预期完全不同时,我的演员会发生波动。

我打印的结果是:

块引用

    degree is :: 141.93233
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 158.61426
    degree is :: 90.0
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 90.0
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 141.93057
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 141.93306
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 141.93257
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 141.93134
    degree is :: 141.93257
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 141.93134
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 141.93306
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 141.93257
    degree is :: 180.0
    degree is :: 141.93134
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 141.93257
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 141.93257
    degree is :: 180.0
    degree is :: 141.93134
    degree is :: 180.0
    degree is :: 141.93257
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 141.93008
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 141.93306
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 141.93257
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 141.93134
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 180.0
    degree is :: 180.0
Run Code Online (Sandbox Code Playgroud)

现在,180 和 141 为什么它会随着这些值而波动。考虑到我一直期待 141 或 180,我需要在上述公式中进行更改。

小智 5

第一个参数必须是 y,第二个参数是 x。

double atan2(double y, double x)
Run Code Online (Sandbox Code Playgroud)

Atan2 实际上是指定 y/x 的反正切函数

因为通常第一个参数是 y。

此外,有时当您交换 x 和 y 时,您可以获得适当的度数,因为在某些边界(如 x<0 和 y<0)中,交换与否无关紧要。

看这里了解更多解释