2012-02-19 3 views
0

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

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

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

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

Я бы предложил приобрести, например. учебник по математике средней школы для этого и работа с упражнениями. –

ответ

0

В этом by Neil Brown содержится исчерпывающая статья. Нейл пишет в Greenfoot, который основан на Java, поэтому он должен быть достаточно прямым, чтобы вывести пример кода.

+0

Спасибо за ссылку, я пойду, хотя это. –

+0

Этот урок помог мне разобраться в этом. Благодаря! –

0

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

+0

"целое число, которое указывает положение указанных координат относительно этой строки2D". Откуда стоит Line2D? X-Y предмета? –

+0

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

0

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

EDIT:

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

+0

Я все же предлагаю вам попробовать и использовать то, что предложил Луи Вассерман, поскольку они могут иметь более быстрый алгоритм, реализованный для решения проблемы по часовой стрелке против часовой стрелки. –

+0

Спасибо, я изучаю его. Однако я не понимаю, как это реализовать. –