我对这个感到困惑。
我有一个物体,我知道它在轴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)
答案 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;