ループ処理が途中までしかできない原因

3 views (last 30 days)
知真 梶山
知真 梶山 on 11 Oct 2021
Answered: Atsushi Ueno on 17 Oct 2021
30個のマーカーが以下のように格子状に並んでおり、横に隣り合うマーカー間のベクトルを作成したいです。
(1-2,2-3,3-4,4-5,6-7,7-8....のように)
そこで、マーカーの三次元データから以下のループをつくりました。
%マーカ間距離の算出
%マーカ1からマーカ2のベクトルを作成
%位置XYX 配列の並び
% 1--2--3--4--5
% | | | | |
% 6--7--8--9-10
% | | | | |
%11-12-13-14-15
% | | | | |
%16 17 18 19 20
% | | | | |
m_vector_hor = zeros(md.Frame_No,3,24);
for j=0:5
for k=1:4
m_vector_hor(:,:,j*4+k) = [X(:,j*5+(k+1))-X(:,j*5+k),Y(:,j*5+(k+1))-Y(:,j*5+k),Z(:,j*5+(k+1))-Z(:,j*5+k)];
end
end
m_vector_hor(:,:,4)までは正常に動くのですが、m_vector_hor(:,:,5)以降から全て0の配列になってしまいます。
どこが間違っているのでしょうか。

Answers (1)

Atsushi Ueno
Atsushi Ueno on 17 Oct 2021
> m_vector_hor(:,:,4)までは正常に動くのですが、m_vector_hor(:,:,5)以降から全て0の配列になってしまいます。
ここではmd.Frame_No=1780としましたが、問題が再現しません。m_vector_hor(:,:,5)以降から全て0の配列になりませんでした。恐らく質問者様の環境と質問文に提示されたデータに違いがあるのではないかと思います。
上図は左からX,Y,Zをプロットしたものです。全て31列~100列がゼロになっています。しかし下記演算においては、j=5,k=4の時の最大となるindexがj*5+(k+1)=30なので、値の入っている範囲しか演算に使っていません。
> どこが間違っているのでしょうか。
X,Y,Zそれぞれについて5列ずつ差分(diff)を取ってm_vector_horにまとめて3次元データとして格納しています。その通りの意図であれば、エラーもありませんし、特にどこも間違っていないと思います。
以上、恐らく既に自己解決していると思いますが、後から見る人の為にも回答致します。

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!