0

我想这更像是一个数学问题,但请多多包涵:)

我有一个向量定义如下:

 var direction:b2Vec2 = new b2Vec2(_target.x - this.x, _target.y - this.y);
 direction.Normalize();

我用的

   _body.SetLinearVelocity(new b2Vec2(direction.x*2, direction.y*2));

将身体向前推向目标。

我的问题是我如何才能找到我身体的相对位置。例如,从那个归一化的向量中,我如何判断目标是在右边、左边、上还是下?

我想使用归一化的方向向量来获得我的身体相对于目标的“位置”。这怎么可能?

顺便说一句,我只需要将相对位置归一化为四个基本方向。

4

2 回答 2

1

让我们考虑一些案例,并尝试形成一个直观的理解——

1) 相对于全局坐标,目标位于 (2, 2),身体位于 (-1, 1)

你的方向向量是 (3, 1)。由于两个分量都是正的,所以目标是身体的右侧和上方。

1) 相对于全局坐标,目标位于 (2, -2),身体位于 (-1, 1)

你的方向向量是 (3, -3)。由于 x 分量为正,因此目标位于身体右侧。由于 y 分量为负,因此目标位于身体下方。

如果您在 2D 轴上绘制这些点并计算方向向量,这些对您来说将变得显而易见。

于 2013-04-15T02:11:33.590 回答
1

这里的矩阵变换:

   _target.y-this.y   _target.x-this.x
 - _target.x-this.x   _target.y-this.y

会将您的向量(并按 x^2 + y^2 缩放,但这没关系)旋转到 x 轴。对身体的位置应用相同的变换,然后使用两个坐标的符号来确定它相对于原始矢量位于哪个象限。

于 2013-04-15T02:12:28.430 回答