0
我有一些形式的圓柱線源,我用它來通用3D核心;我通過首先生成一個簡單的二維核心來做到這一點,如下所示:在MATLAB多維數組中旋轉元素?
A = 625;
B = 25;
%2D kernal
grid2d = zeros(101,101);
c = 51; %centre
for m = 1:101
for n = 1:101
r(m,n) = sqrt((m - c).^2 + (n - c).^2); %distance of point on grid to centre
%Populating the grid as a kernal
if r(m,n) <= 5
grid2d(m,n) = 100;
elseif r(m,n) >= 25
grid2d(m,n) = 0;
else
grid2d(m,n) = A./r(m,n) - B;
end
end
end
這給了我一個2D核心。現在,如果我將3D版本定義爲沿着更大網格內z軸的9個元素,我可以通過以下創建3D內核;
gz = 147:155; %9 elements in the z axis
H = length(gz);
kernel3D = zeros(301,301,301); %
for n = 1:H
kernel3D(151-50:1:151+50,151-50:1:151+50,gz(n)) = grid2d;
end
這工作完全,如果我用垂直線源,但我很好奇它是否可以旋轉這個數組的元素在任何需要的方向,所以我可能會爲斜源內核;例如,假設我想將這個數組相對於XY平面旋轉45度,並且在(151,151,151)處通過線源中心將XZ平面旋轉60度?
有沒有一種優雅的方式來做到這一點,也許使用旋轉矩陣?