Matlab位置列表到速度矢量

时间:2013-05-04 04:10:31

标签: matlab

我有一个位置矩阵,第1列为x,第2列为y。我想计算速度和方向。我写了这段代码

v=sqrt(diff(position(:,1)).^2 + diff(position(:,2)).^2);
theta=atan(diff(position(:,1))./diff(position(:,2)));

v似乎是正确的,但theta介于-pi / 2和pi / 2之间,但是我的节点正朝360个方向移动......我在那里做错了什么?

1 个答案:

答案 0 :(得分:1)

使用atan2代替atan

P = atan2(Y,X)返回一个与X和Y大小相同的数组P,其中包含Y和X实部的逐元素,四象限反正切(反正切)。输入的任何虚部被忽略了。 P的元素位于闭区间[-pi,pi],其中pi是π的MATLAB浮点表示。

另外,我宁愿计算VxVy并将它们存储在变量中以供日后使用和更清晰的代码:

vx = diff(position(:,1));
vy = diff(position(:,2));
v  = sqrt( vx.^2 + vy.^2 );
theta = atan2( vy , vx ); % note the order of vx and vy for atan2 function