ループ処理が途中までしかできない原因
6 views (last 30 days)
Show older comments
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の配列になってしまいます。
どこが間違っているのでしょうか。
1 Comment
Atsushi Ueno
on 17 Oct 2021
Moved: Atsushi Ueno
on 17 Aug 2022
> 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次元データとして格納しています。その通りの意図であれば、エラーもありませんし、特にどこも間違っていないと思います。
以上、恐らく既に自己解決していると思いますが、後から見る人の為にも回答致します。
Answers (0)
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!