我有一個位置矩陣,列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個方向移動......我在做什麼不對勁的地方之間?
我有一個位置矩陣,列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個方向移動......我在做什麼不對勁的地方之間?
使用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
你確定你需要'反正切(VX/VY)'和'不ATAN(VY/VX)...'? – anandr 2013-05-04 04:16:04