列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 方向に移動しています...そこで何が間違っていますか?
列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 方向に移動しています...そこで何が間違っていますか?
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