根据速度确定运动矢量的方向

时间:2014-03-15 07:42:48

标签: javascript vector 2d angle

我对这个感到困惑。

我有一个物体,我知道它在轴x和y上的速度。我的问题是如何确定它移动的角度。

function Object(){
    this.velocity = {x: 5, y:1};
}

基本上我知道矢量的方向是x_projection * cos(deg)+ y_projection * sin(deg),但我不知道如何获得这些投影,因为我只有速度,正如我所说我真的困惑。

编辑:

除了接受的答案之外,这是我为获得完整的360度光谱所做的工作

var addDeg = 0;
if(obj.velocity.x<0)
    addDeg = obj.velocity.y>=0 ? 180 : 270;
else if(obj.velocity.y<=0) addDeg = 360;

deg = Math.abs(Math.abs(Math.atan(obj.velocity.y/obj.velocity.x)*180/Math.PI)-addDeg)

3 个答案:

答案 0 :(得分:4)

  

我不知道如何获得这些预测,因为我只有   速度

实际上,你似乎缺少的是你已经有了预测。那就是x和y是什么。

x 速度* cos(角度)

y 速度*罪(角度)

所以y / x = sin(角度)/ cos(角度)是tan(角度)所以angle = arctan(y / x)。

从x轴开始逆时针旋转的角度(x指向右,y指向上方)。

答案 1 :(得分:1)

找出该向量与(1,0)之间的角度(右水平正方向)。

数学是:

A =(5,1) B =(1,0)

A.B = | A || B | cos(角度) - &gt; angle = arccos((| A || B |)/(A.B))

Dot product, check geometric definition

编辑:

另一种选择是使用叉积公式:

| AXB | = | A || B | sin(角度) - &gt; angle = arcsin((| A || B |)/(| AxB |))

它将为您提供所需的角度。

答案 2 :(得分:0)

有一种更容易获得360度全方位的方法。您正在寻找的是Math.atan2

deg = Math.atan2(obj.velocity.y,obj.velocity.x)*180/Math.PI;