使任何向量指向原点?

时间:2015-04-13 22:38:57

标签: c++ opengl math vector

任何值的向量都需要指向原点。任何人都可以帮我数学吗?这是我制作的程序所必需的。我正在使用动画,所以我有一个位置(x,y)和一个方向向量,每次动画时都会添加到该位置。我想使方向向量始终使我的动画对象始终浮动到我的程序中的屏幕中心(0,0)。所以,如果我的位置是(1.3,0.0),我希望方向向量在每个动画周期或帧中继续添加类似(1.3 - 0.2,0.0)的东西吗?

1 个答案:

答案 0 :(得分:1)

这是非常基本的矢量几何。如果您有位置(x, y),则表示(x, y)是从原点到位置的向量。相反方向的向量,即从位置到原点的含义,只是反转符号的向量,即(-x, -y)

获得相同值的另一种方法:从点p到点q的向量是两点之间的差异q - p。因此,从(x, y)到点(0, 0)的向量为(0, 0) - (x, y),即(0 - x, 0 - y),或(-x, -y)

根据您使用此向量的方式,您可能需要对其进行标准化。例如,如果您想以给定的速度v向这个方向移动,则向量的长度需要为v。这是通过首先将矢量除以其长度sqrt(x * x + y * y),然后将其乘以v来完成的。这样,得到的矢量计算如下:

s = v / sqrt(x * x + y * y);
vx = - s * x;
vy = - s * y;

要将其作为动画的一部分应用,您可以将此向量乘以自上次更新以来经过的时间,并将结果添加到当前位置。这通常看起来像这样:

currentTime = getTime();  // system specific function for getting current time
deltaTime = currentTime - lastTime;
lastTime = currentTime;  // save current time for next update

// Update position by adding delta time multiplied by velocity vector
x += deltaTime * vx;
y += deltaTime * vy;