2011-02-10 1 views
2

Мне нужно написать метод, который перемещает объект (например, круг) по прямой линии от одной координаты к другой с заданной скоростью. Объект должен попасть в целевую точку и остановиться. Скорость коррелирует со временем, когда объект достигает точки (скорость = 15 эквивалентна времени = 15 мс, например). Если бы кто-то помог мне с математикой здесь, я был бы изящным, пожалуйста.Метод перемещения объекта из точки (x1, y1) в точку (x2, y2) с заданной скоростью по прямой в java

ответ

7

Формула интерполяции для перехода от точки р0 до точки p1 при постоянной скорости является:

p(t) = p0*(1-t) + p1*t 

, где t время, которое было уменьшено, чтобы варьировать от 0 в начале 1 в конце и p, p0 и p1 - пары координат (x, y). Поскольку Java не имеет встроенного способа записи формулы интерполяции, вы просто применяете ее к компонентам x и y параллельно. Результат:

t = (time_now - start_time)/total_time; 
x = x0*(1-t) + x1*t; 
y = y0*(1-t) * y1*t; 

Это основной расчет. Для того, чтобы получить объект двигаться, вы выполните следующие действия:

  1. [Дано: start_time, Total_time, x0, y0, x1, y1]
  2. положить круг в точке (x0, y0) и установить time_now = start_time
  3. до time_now == start_time + total_time, вычислить (x, y), используя вышеизложенное, переместить круг в (x, y) и увеличить time_now.

Приращение времени может быть обычным настенным временем, определяемым System.getTimeMillis().

+2

++ Возможно, вы захотите немного поспать в цикле или, возможно, отключите его от события таймера. Также используйте> = для сравнения времени, потому что == может быть пропущен. –

+0

Хорошие очки. Эффект краевого эффекта, когда требуется увеличить инкремент за считанные секунды, нужно учитывать ... вы не хотите перевыполнять конечную точку только потому, что время прошло за прошедшее время. –

Смежные вопросы