需要将速度转换为旋转的功能

时间:2011-07-26 22:52:48

标签: java math physics

我有一个飞行物体,我想指向它的方向。我所拥有的是物体的当前x和y速度以及旋转图像的能力。所以我需要的是一个获取x和y速度的函数,并给出我需要旋转的度数。这是我到目前为止的功能:

private float getRotation(float x, float y)
{
    if (x == 0 && y > 0)
        return 90;
    else if (x == 0 && y < 0)
        return 270;
    else if (x > 0 && y == 0)
        return 0;
    else if (x < 0 && y == 0)
        return 180;
    else if (x == 0 && y == 0)
        return 0;
    else
        return ????;
}

到目前为止我所拥有的是正确的,除了????是最重要的部分。任何人都知道如何使这项工作?

这可能更像是一个数学问题,但它涉及编程,所以如果这是在错误的论坛上,我道歉。

2 个答案:

答案 0 :(得分:4)

答案 1 :(得分:1)

我必须为我写的游戏做类似的事情,我最终使用极坐标..结果如下:

if (velocity.x > 0 && velocity.y >= 0)
    angle =  atan(velocity.y/velocity.x);
else if (velocity.x > 0 && velocity.y < 0)
    angle = atan(velocity.y/velocity.x) - 2.0f*PI;
else if (velocity.x < 0)
    angle = atan(velocity.y/velocity.x) + PI;
else if (velocity.x == 0 && velocity.y > 0)
    angle = PI/2.0f;
else if (velocity.x == 0 && velocity.y < 0)
    angle = 3.0f*PI/2.0f;

当我写这篇文章时我还年轻,atan2实际上已经足够了,但我确实希望通过浏览我的旧源代码来获得乐趣。

只是旁注:不要对浮点数使用相等的比较(==),总是检查一个阈值(例如abs(x) < 0.01f),只是因为你知道,它们并不精确你希望他们成为。