将对象转向给定的坐标

时间:2012-02-19 17:06:25

标签: java trigonometry

我目前有一个物体飞过太空,我想让物体转向一个给定的坐标。

由于某种原因,物体旋转而不是自行调整。

我的三角测量几乎不存在,到目前为止我一直在使用猜测工作,所以基本的解释请: - /

public void TurnTowardsDestination(double DestinationX, double DestinationY)
{
    //Current Co-Ordinate of the object.
    double positionX = x; 
    double positionY = y;

            //My failed attempt at understanding atan2.
    float spriteToDestAngle =  (float) Math.toDegrees(Math.atan2((positionX - DestinationX),(positionY - DestinationY)));

            //The Rotate, true is clockwise false anti-clockwise.
    if(spriteToDestAngle > 0.0){
        RotateItem(true);
    }else{
        RotateItem(false);
    }

    Log.w("direction", Integer.toString((int) spriteToDestAngle));
}

有人能指出我正确的教程,或至少解释我如何让对象向正确的方向移动。


我使用了一个有效的修复程序:(对于其他任何坚持这个的人) 从: http://sinepost.wordpress.com/2012/02/16/theyve-got-atan-you-want-atan2/

    int distX = (int) (DestinationX - x);
    int distY = (int) (DestinationY - y);

    double angleRadians = Math.atan2(distY, distX);
    int angleDegrees = (int)Math.toDegrees(angleRadians);

    //setRotation(angleDegrees);

3 个答案:

答案 0 :(得分:0)

您可能会发现Line2D.relativeCCW(Point2D)在确定点是顺时针还是逆时针从给定矢量非常有用。

答案 1 :(得分:0)

我只想指出你的触发器实际上听起来很合理,只是你的逻辑不正确。例如,如果您的目标位于当前位置的正上方,则spriteToDestAngle将为90.即使您直接指向它,您的代码也会指出它应该旋转。你应该存储当前的方向并与之比较。

修改

澄清一下,你从不考虑当前的方向。您只能根据位置进行轮换。

答案 2 :(得分:0)

有一篇关于这个by Neil Brown的综合文章。 Neil正在使用基于Java的Greenfoot编写代码,因此应该非常直接地移植示例代码。