首页 > 解决方案 > 2D 运动矢量 - 在给定时间计算对象的位置

问题描述

在给定时间移动某些对象时,我无法理解 2D 运动矢量。我对线性代数的了解有限,我真的不知道要寻找的确切搜索词,所以我想知道是否有人可以帮助我,或者至少提示我正确的方向。

我的问题是这样的:

我在空间中有两个点,一个 startPoint 和一个 endPoint。它们都有一个特定的位置,分别表示为 (x_1, x_2) 和 (y_1, y_2)。这两个点都附加了一个时间,分别命名为 t_startPoint 或 t_endPoint。我现在想知道,对于给定的 currentTime(= 基本上是介于 t_startPoint 和 t_endPoint 之间的任何时间点),新点 N 将位于这两个点之间的连接线上的确切位置。我知道描述不是微不足道的,这就是为什么我还添加了一张图片来描述我想做的事情:

在此处输入图像描述

到目前为止,这就是我的算法:

函数更新(_时间: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))

    //

然而,无论我做什么,我的对象都在不断地超调,来回不规律地移动,我不知道从哪里开始。任何帮助将不胜感激!

标签: swiftalgorithmvectorgeometrygame-physics

解决方案


对于匀速运动,有关系:

 (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

推荐阅读