2013-05-04 98 views
0

我有一个位置矩阵,列1作为x和列2作为y。我想计算速度和方向。我写了这个代码Matlab位置列表到速度矢量

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个方向移动......我在做什么不对劲的地方之间?

+0

你确定你需要'反正切(VX/VY)'和'不ATAN(VY/VX)...'? – anandr 2013-05-04 04:16:04

回答

1

使用atan2代替atan

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

而且我宁愿计算01​​和Vy并将它们存储在供以后使用的变量和清洁代码:

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 
+0

v需要sqrt,对不对? – Kiarash 2013-05-04 04:18:03

+0

theta = atan2(diff(position(:,1)),diff(position(:,2)))? – Kiarash 2013-05-04 04:18:29

+0

当然,'v'需要'sqrt'。查看我编辑的'atan2'用法。 – anandr 2013-05-04 04:21:34