因此,我正在尝试转换以下代码,以便能够使用多个选项。(案例内部发生的事情并不重要,我只想弄清楚如何一次使用多个案例(
%% Creating a matrix Rot representing the rotational transformation that is applied.
theta = input('Input the value of angle: ');
% Choose the direction
Dir = input('Input around which axis the rotation occurs (x, y or z): ', 's');
if Dir == 'x'
Rot = [1 0 0;0 cosd(theta) -sind(theta);0 sind(theta) cos(theta)];
elseif Dir == 'y'
Rot = [cosd(theta) 0 sind(theta);0 1 0;0 -sind(theta) cos(theta)];
elseif Dir == 'z'
Rot = [cosd(theta) -sind(theta) 0;0 sind(theta) cos(theta);0 0 1];
else
disp('Not an axis.')
Rot = input('Input Rotational Transformation Matrix: ')
end
我尝试使用开关/案例或条件,但未能获得不同的结果。
该代码的最终目标是能够选择应力张量的旋转方向。我的代码适用于简单的情况,但我希望它能够在x中旋转30度,在y中旋转45度进行计算,而无需重新运行代码。
要回答有关代码流的问题,对if/elseif/else
链最简单的替换就是使用switch
语句。
switch Dir
% for a single axis rotation
case 'x'
% Code for a rotation about a single axes ('X')
case 'y'
% Code for a rotation about a single axes ('Y')
case 'z'
% Code for a rotation about a single axes ('Z')
%% For complex rotation about more than one axes
case 'xy'
% Code for a rotation about 2 axes ('X' and 'Y')
case 'xz'
% Code for a rotation about 2 axes ('X' and 'Z')
case 'yz'
% Code for a rotation about 2 axes ('Y' and 'Z')
case 'xyz'
% Code for a rotation about 3 axes ('X', 'Y' and 'Z')
otherwise
% advise user to re-input "Dir"
end
或者,你也可以在你的问题下使用标志系统,如@Tasos Papastylianou评论中的mentioned。它的实现有点技术性,但也是一个非常好的解决方案。
现在这只关心代码流。每种情况下计算的实际有效性取决于您。对于绕多个轴旋转,请记住,应用旋转的顺序很重要:首先绕X
旋转,然后绕Y
旋转,可以产生与先绕Y
旋转,然后再绕X
旋转不同的结果,即使每个轴的旋转角度相同。