2D Motion vectors - вычислить местоположение объекта в данный момент - PullRequest
0 голосов
/ 12 декабря 2018

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

Моя проблемавыглядит следующим образом:

У меня есть две точки, начальная точка и конечная точка в пространстве.У каждого из них есть определенное местоположение, обозначенное как (x_1, x_2) и (y_1, y_2) соответственно.Обе эти точки имеют привязанное время, называемое t_startPoint или t_endPoint, соответственно.Теперь я хочу выяснить, для данного currentTime (= практически любого момента времени, который находится между t_startPoint и t_endPoint), где именно будет расположена новая точка N на линии соединения между этими двумя точками.Я знаю, что описание не тривиально, и поэтому я также добавил изображение, описывающее то, что я хотел бы сделать:

enter image description here

Пока это то, чтоУ меня есть мой алгоритм:

func update (_ time: Int64) {

    let t_startPoint: Int64 = 1
    let position_startPoint: = (1.0, 1.0)

    let t_endPoint: Int64 = 5
    let position_endPoint: Vector = (4.0, 5.0) 

    let currentTime = 3

    let duration = t_endPoint - t_startPoint

    let x = position_startPoint.x + ((position_endPoint.x - position_startPoint.x) / Float(duration)) * (Float(currentTime - t_startPoint))
    let y = position_startPoint.y + ((position_endPoint.y - position_startPoint.y) / Float(duration)) * (Float(currentTime - t_startPoint))

    //

Однако, независимо от того, что я делаю, мои объекты продолжают перебегать, беспорядочно перемещаться взад-вперед иЯ не знаю с чего начать.Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 12 декабря 2018

Для движения с постоянной скоростью есть соотношение:

 (t-t1) / (t2-t1) = (x-x1) / (x2-x1) 
 x = x1 + (x2-t1) * (t-t1) / (t2-t1)    

, поэтому ваше выражение выглядит правильно.Проверить:

1 + (4-1) * (3-1) / (5-1) = 1 + 3 * 2 / 4 = 2.5 - exact middle, OK
...