2次元座標から移動距離を求めたい

18 ビュー (過去 30 日間)
yuta
yuta 2022 年 2 月 25 日
コメント済み: yuta 2022 年 3 月 4 日
重心動揺計のデータから総移動距離を算出したいのですが、コードがわからず質問しました。
2次元座標のデータから、移動距離を算出したいです。1000Hzで計測を行なっており、1秒間に1000個の座標(X, Y)が計測時間分、生データとして抽出されます。それらのデータにおける各距離を求め、それらの合計を算出するにはどのようなコードを書けばよろしいでしょうか。
MATLABを使用し始めたばかりで、素人質問で申し訳ありませんが、ご教示いただければ幸いに存じます。
どうぞよろしくお願いいたします。
  2 件のコメント
Hernia Baby
Hernia Baby 2022 年 2 月 26 日
dt=1/1000sec毎の移動距離を合計したコードを作成したいという認識でよろしいですか?
yuta
yuta 2022 年 2 月 26 日
はい、その通りです。 ○秒間における総移動距離を算出できると助かります。 よろしくお願いします。

サインインしてコメントする。

採用された回答

Hernia Baby
Hernia Baby 2022 年 2 月 26 日
編集済み: Hernia Baby 2022 年 2 月 26 日
■前準備
まずは数値などのリセットをします(今回はなくてもよい)。
clear,clc,close all;
サンプリング周波数 1000Hz で 10秒間 の時間を算出します。
F = 1000;
t = (0:1/F:10-1/F)';
今回の題材はインボリュート曲線にします。
a = 1;
x = a*(cos(t) + t.*sin(t));
y = a*(sin(t)-t.*cos(t));
こういう図ですね。
plot(x,y,'--k')
xlim([-10 10])
ylim([-10 10])
■距離
距離は前とのステップの差をとって三平方の定理を用います。
つまり総移動距離は をとった後にそれを足し合わせればいいわけですね。
1step後の差分は diff を使います。
dx = diff(x);
dy = diff(y);
dr = sqrt(dx.^2 + dy.^2);
サンプリングブロック分の総移動距離を求めてみましょう。
F - 1 は 差分をとっているので 1 点少なくなります。植木算ってやつですね。
dr_SUM1 = sum(dr(1:F-1))
dr_SUM1 = 0.4990
t = 3 秒後までの総移動距離を求めてみましょう。
まず t = 3 は 何行目にあるかを find で求めます
idx = find(t == 3)
idx = 3001
後は植木算を考えて
dr_SUM_3sec = sum(dr(1:idx-1))
dr_SUM_3sec = 4.5000
■おまけ
サンプリング周波数ごとに切った移動距離は以下のようになります。
plot(x,y,'--k')
xlim([-10 10])
ylim([-10 10])
hold on
for ii = 1:height(t)/F
dr_SUM(ii,1) = sum(dr((F-1)*(ii-1)+1:(F-1)*ii));
plot(x((F-1)*ii),y((F-1)*ii),'r','Marker','o','MarkerFaceColor','r','MarkerEdgeColor','none')
text(x((F-1)*ii)+0.2,y((F-1)*ii),sprintf('距離 %g ',dr_SUM(ii,1)))
end
  3 件のコメント
Hernia Baby
Hernia Baby 2022 年 2 月 26 日
もしわからない点ありましたら、ここにコメントください。
案件解決しましたら、クローズするために回答を採用していただけると幸いです。
yuta
yuta 2022 年 3 月 4 日
わかりやすい説明ありがとうございました。
助かりました!!!!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

タグ

製品


リリース

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!