确定2D矢量的一般方向

Gui*_*Sim 2 2d vector

我有一个相当简单的问题.我觉得我应该在很久以前找到答案,但不知何故我无法解决这个琐碎的问题.

给定矢量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 ...
Run Code Online (Sandbox Code Playgroud)

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

谢谢 !

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

Dan*_*ral 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
}
Run Code Online (Sandbox Code Playgroud)

45度角总是向左或向右.