我有一个飞行物体,我想指向它的方向。我所拥有的是物体的当前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 ????;
}
到目前为止我所拥有的是正确的,除了????
是最重要的部分。任何人都知道如何使这项工作?
这可能更像是一个数学问题,但它涉及编程,所以如果这是在错误的论坛上,我道歉。
答案 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
),只是因为你知道,它们并不精确你希望他们成为。