Перемещение нескольких спрайтов по эллиптической траектории с одинаковой скоростью

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

я пытался

  • Перемещайте каждый спрайт угол за углом, однако проблема заключается в том, что расстояние, пройденное при перемещении единичного угла вокруг большой оси, отличается от расстояния при перемещении единичного угла вокруг малой оси - следовательно, разное пройденное расстояние.

  • Равномерно перемещает спрайты только с изменением оси x, однако они снова перемещаются вокруг главной оси.

Итак, есть идеи, как равномерно перемещать спрайты, не догоняя/перекрывая друг друга?

Другая информация:

  • он будет вызываться в onMouseMove/onTouchMoved, поэтому я думаю, что он не должен сильно нагружать процессор.
  • Хотя это общий вопрос алгоритма, но если это поможет, я использую cocos2d-x

person user1842290    schedule 21.11.2012    source источник


Ответы (1)


Итак, вот что я сделал (что решило это для меня):

Я переместил его в уравнении окружности и увеличил угол на 1 градус. Вычисление x и y с использованием sin/cos(угол) * радиус. И чтобы превратить его в эллипс, я умножил его на коэффициент.

Фактор был yIntercept/xIntercept.

так это выглядело в итоге

FACTOR = Y_INTERCEPT / X_INTERCEPT;

//calculate previous angle
angle = atan((prev_y/FACTOR)/prev_x);

//increase angle by 1 degree (make sure its not radians in your case)
angle++;

//new x and y
x =  cos(newangle) * X_INTERCEPT;
y =  sin(newangle) * X_INTERCEPT * FACTOR;
person user1842290    schedule 02.12.2012