필터 지우기
필터 지우기

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

조회 수: 6 (최근 30일)
知真 梶山
知真 梶山 2021년 10월 11일
이동: Atsushi Ueno 2022년 8월 17일
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
Atsushi Ueno
Atsushi Ueno 2021년 10월 17일
이동: Atsushi Ueno 2022년 8월 17일
> 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次元データとして格納しています。その通りの意図であれば、エラーもありませんし、特にどこも間違っていないと思います。
以上、恐らく既に自己解決していると思いますが、後から見る人の為にも回答致します。

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 ループと条件付きステートメント에 대해 자세히 알아보기

태그

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!