У меня есть форма цилиндрической линии, которую я использую для создания трехмерного ядра; Я делаю это, сначала создавая простое двумерное ядро:Вращающиеся элементы в многомерном массиве 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
Это дает мне двумерное ядро. Теперь, если я определяю 3D-версию как 9 элементов, расположенных вдоль оси z внутри большей сетки, я могу создать 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
Это отлично работает, если я с помощью вертикальных линий источников, но мне интересно, можно ли вращать элементы этого массива в любом желаемом направлении, так что я мог бы генерировать ядра для наклонных источников; например, предположим, что я хотел повернуть этот массив на 45 градусов относительно плоскости XY и на 60 градусов по плоскости XZ через центр источника линии (151,151,151)?
Есть ли элегантный способ сделать это, возможно, используя матрицы вращения?