确定2D矢量的一般方向

时间:2009-06-19 02:00:27

标签: vector 2d

我有一个相当简单的问题给你.. 我觉得我应该在很久以前找到答案但不知何故我无法解决这个微不足道的问题。

给定矢量v =(x,y),我想知道它是'一般'方向。那就是'上','下','左'或'右'

如果矢量的方向介于45和135度之间,则矢量的一般方向为“向上”。 “左”在135到225度之间。 '向下'介于225和315度之间。 “右”在315到45度之间。

我并不关心角度正好是45度,135度,225度或315度的情况。

问题是,我不想使用三角学。我很确定这是一个简单的解决方案。

我认为解决方案可以将整个圈子分成八个。这是我到目前为止所拥有的。

if(x > 0 && y > x)
    return Up
if(x > 0 && y > 0 && y < x )
    return Right

... etc ...

基本上,我知道我可以找到解决方案。我对你解决这个问题的方法更感兴趣。

谢谢!

编辑:使用的矢量未标准化。您可以使用一对点表示任何矢量。只需假装向量的原点是(0,0)。

3 个答案:

答案 0 :(得分:7)

确实有一种方法。所有你必须意识到的是,如果abs(y)> abs(x),那么方向是垂直的,否则方向是水平的。如果是垂直的,y上的符号将指示向上/向下,否则,x上的符号将指示向左/向右。所以:

if (abs(y) > abs(x)) {
  if (y > 0) up else down
} else {
  if (x > 0) right else left
}

45度角总是向左或向右。

答案 1 :(得分:0)

我知道你说你想避免触发,但是你曾经使用过atan2功能吗?它非常容易用于确定矢量的角度:

double ldAngle = atan2(vector.y, vector.x) * 180 / PI;

答案 2 :(得分:0)

假设您正在进行标准化的向量空间(编辑:意味着您的向量由unit vectors组成),那么您的方法就是现场,而最常用的是2d游戏和动画。不过,我会核实你的真相表。

@ Daniel的方法是更优雅的IMO。