Поворот объекта в направлении заданной координаты - PullRequest
0 голосов
/ 19 февраля 2012

В настоящее время у меня есть объект, летящий через пространство, я хочу, чтобы объект повернулся к определенной координате.

По какой-то причине объект вращается по кругу, а не подстраивается.

Моя тригганометрия почти не существует, и до сих пор я использую догадку, поэтому базовое объяснение, пожалуйста: - /

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 голосов
/ 19 февраля 2012

Я просто хотел бы отметить, что ваш триггер здесь действительно хорош, просто ваша логика неверна.Например, если ваш пункт назначения находится прямо над текущей позицией, то spriteToDestAngle будет равен 90. Даже если вы указываете прямо на него, ваш код утверждает, что он должен вращаться.Вы должны сохранить текущее направление и сравнить с ним.

РЕДАКТИРОВАТЬ:

Чтобы уточнить, вы никогда не принимаете во внимание ваше текущее направление.Вы вращаетесь исключительно на основе позиции.

0 голосов
/ 19 февраля 2012

Об этом написана всеобъемлющая статья . Нил пишет в Greenfoot, который основан на Java, поэтому будет довольно просто перенести пример кода.

0 голосов
/ 19 февраля 2012

Возможно, вы найдете Line2D.relativeCCW(Point2D) очень полезным для определения, находится ли точка по часовой стрелке или против часовой стрелки от заданного вектора.

...