Перемещение точки по вектору


У меня есть точка, определяемая x, y, и вектор, определяемый заголовком и скоростью. Я пытаюсь переместить точку x, y вдоль этого вектора на расстояние «скорости». Ниже приведен код, который я сейчас использую:

self.x += self.speed * cos(self.heading);
self.y += self.speed * sin(self.heading);

Направление может быть любым углом в полном круге - от 0 до 2π (0-360 градусов). Проблема в приведенном выше коде:

  • Only moves along the x or y axis when angle is 0->270
    • for example, when the avatar is facing the top-right corner (45 degrees relative), it moves straight up.
  • Не двигается вообще, когда угол 270-> 360

курс, скорость, X и Y - все двойные, и курс сообщается пользователем, касающимся панели направления в нижнем углу. Я знаю, что заголовок правильный, потому что аватар вращается в правильном направлении, это просто фактическое движение, с которым у меня проблемы.

Спасибо за любую помощь
– Крис


person Chris    schedule 22.12.2010    source источник
comment
Выглядит правильно для меня. Вы уверены, что self.speed и self.heading верны? (И они оба примитивные двойники, а не NSNumbers?)   -  person Asher Dunn    schedule 22.12.2010
comment
Триггер выглядит правильно, поэтому проблема, вероятно, где-то еще в вашем коде.   -  person Jim Lewis    schedule 22.12.2010


Ответы (1)


Двигаться прямо вверх будет sin(90), а не sin(45). Значит у вас там какая-то проблема.

(sin(90) == 1, который будет просто добавлять вашу скорость к y и ничего к x, потому что cos(90) == 0).

person zsalzbank    schedule 22.12.2010