我有一个位置矩阵,第 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 列作为 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 个方向移动……我在那里做错了什么?
使用atan2
代替atan
:
P = atan2(Y,X)
返回一个与 X 和 Y 大小相同的数组 P,其中包含 Y 和 X 的实部的逐个元素的四象限反正切(反正切)。输入的任何虚部都将被忽略。P 的元素位于闭区间 [-pi,pi] 中,其中 pi 是 π 的 MATLAB 浮点表示。
此外,我宁愿计算Vx
并将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