Переходя из xy в другую точку, где я нахожусь в момент времени t? - PullRequest
1 голос
/ 18 марта 2012

Как бы я написал функцию для перемещения из точки 1 в точку 2 через некоторое время?

Например:

Point move(Point point1, Point point2, long timeInMilliseconds, int speedPerSecond)
{
  // basic stuff
  int pointsMoved = speedPerSecond * 1000 / timeInMilliseconds;
  if (point1.x == point2.x && point1.y > point2.y)
    return (new Point(point1.x, Math.min(point2.y, point1.y + pointsMoved)));
  ...
}

Да, на этом мои грустные математические навыки заканчиваются. Как мне двигаться, если движение не диагональное или вертикальное? если есть угол?

Кстати, я планирую пересчитать текущую точку на основе точки 1 и 2, я не буду обновлять точку 1 и точку 2 из вызывающей стороны, поэтому вызывающая сторона будет выглядеть следующим образом:

Point currentPoint = move(originalPoint, finalPoint, getCurrentTime() - originalTime, 10);

Подпись функции не обязательно должна быть той, о которой я говорил. Он может очень хорошо использовать градусы, но это будет еще одна вещь, чтобы выяснить, если мне придется использовать градусы.

1 Ответ

3 голосов
/ 18 марта 2012

Вот общая формула движения:

p = k⟨p 2 - p 1 ⟩ + p 1

p 1 - начальная позиция. p 2 - конечная позиция. p - текущее местоположение. k - это соотношение, обычно между 0 и 1, которое определяет, сколько расстояний до p 2 мы преодолели.

Ваша функция получает t n , текущее время и v , скорость от p 1 до p 2 .Поэтому нам нужен еще один кусок для вычисления k: расстояние от p 1 до p 2 .t n в единицах времени ( t ), расстояние | p 2 - p 1 |в единицах расстояния ( d ), а скорость указана в единицах измерения расстояния ( d / t ).k не имеет единиц измерения, поэтому мы должны нейтрализовать единицы в трех значениях.

d / ( d / t )/ т
= д / д · т / т
= 1

и наши подразделения нейтрализованы.

Итак, мы имеем:

k = | p 2 - p 1 |/ v / t n

Расстояние легко определяется с помощью теоремы Пифагора, что дает нам k.Оттуда мы разлагаем общую формулу на ее составляющие:

p x = k (x 2 - x 1 ) +x 1
p y = k (y 2 - y 1 ) + y 1

k, будучи единичным, несмотря на то, что содержит элементы с компонентами, не разлагается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...