从xy移动到另一个点,在时间t我在哪里?

时间:2012-03-18 01:50:29

标签: java math

如果给定时间,我如何编写一个从point1移动到point2的函数?

例如:

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)));
  ...
}

是的,这就是我悲伤的数学技能结束的地方。 如果运动不是对角线或垂直,我该如何移动?如果有角度?

顺便说一句,我打算根据point1和point2重新计算当前点,我不会从调用者那里更新point1和point2,所以调用者看起来像这样:

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

该功能的签名不一定是我提到的。它可以很好地使用度数,但如果我必须使用度数,这将是另一件事。

1 个答案:

答案 0 :(得分:3)

以下是一般动作公式:

  

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 )/ t
  = d / d · t / 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,尽管包含具有组件的元素,但仍然是无单元的,不会被分解。