0

列1をx、列2をyとする位置の行列があります。速度と向きを計算したい。私はこのコードを書きました

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

v は正しいようですが、シータは -pi/2 と pi/2 の間にありますが、ノードは 360 方向に移動しています...そこで何が間違っていますか?

4

1 に答える 1

1

atan2の代わりに使用atan:

P = atan2(Y,X)Y および X の実部の要素ごとの 4 象限逆正接 (アークタンジェント) を含む、X および Y と同じサイズの配列 P を返します。入力の虚部は無視されます。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
于 2013-05-04T04:14:08.467 に答える