- 1行目を満たさず(0以下で)、2行目を満たす(πより大きい)事は無いので、2行目はデッドパスになります
- 比較しているのはベクトルのようですが、ベクトルの要素の内一つでも条件を満たさないとFalseになります
asinで角度を算出する際の場合分けをする方法
4 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
asinを用いて関節角度を算出しようとしています。
-2π~2πの区間に数値が収まるように、ifを用いて場合分けをしようと考えているのですが、どのようにすると上手く数値を算出できるでしょうか?
現在はこのような形でコードを用いているのですが、alphaとgammaの角度が上手く算出できません。
どなたか詳しい方がいましたらご教授お願い致します。
Xd = pel_x; % 遠位X軸方向ベクトル 例)(0.015,0.4,1): (x座標,y座標,z座標) <-- 横に入れる(横ベクトル)
Yd = pel_y; % 遠位Y軸方向ベクトル
Zd = pel_z; % 遠位Z軸方向ベクトル
Xp = thigh_x; % 近位X軸方向ベクトル
Yp = knee_y; % 近位Y軸方向ベクトル
Zp = ankle_z; % 近位Z軸方向ベクトル
for i = 1:size(Xd,1)
idx = 3*i-2;
T(idx:idx+2,:) = [dot(Xd(i,:),Xp(i,:)),dot(Xd(i,:),Yp(i,:)),dot(Xd(i,:),Zp(i,:));...
dot(Yd(i,:),Xp(i,:)),dot(Yd(i,:),Yp(i,:)),dot(Yd(i,:),Zp(i,:));...
dot(Zd(i,:),Xp(i,:)),dot(Zd(i,:),Yp(i,:)),dot(Zd(i,:),Zp(i,:))]; % 座標系同士の内積で算出
% alpha: flexion/extension, beta: abduction/adduction, gamma: ext.rotation/int.rotation
beta(i,:) = rad2deg(asin(T(3*i,1)));
alpha(i,:) = rad2deg(asin(-1*T(3*i,2)/cos(beta(i,:))));
if alpha(i,:) > 0
alpha(i,:)=pi-alpha(i,:);
elseif alpha(i,:) > pi
alpha(i,:)=alpha(i,:)-2*pi;
end
gamma(i,:) = rad2deg(asin(-1*T(3*i-1,1)/cos(beta(i,:))));
if gamma(i,:) > 0
gamma(i,:)=pi-gamma(i,:);
elseif gamma(i,:) > pi
gamma(i,:)=gamma(i,:)-2*pi;
end
end
1 commentaire
Atsushi Ueno
le 19 Oct 2021
Déplacé(e) : Atsushi Ueno
le 17 Août 2022
if alpha(i,:) > 0
elseif alpha(i,:) > pi
静的に眺めてみるだけでも疑問点が出てきます。
以上の2点から、if文内の文が実行される事は極めて稀になるので、一目でなんかおかしいと判ります。その点再検討してみては如何でしょうか?
Réponses (0)
Voir également
Catégories
En savoir plus sur 線形代数 dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!