Matlab 从三维阵列中提取任意旋转的数据平面作为二维阵列

Matlab 从三维阵列中提取任意旋转的数据平面作为二维阵列,matlab,3d,matrix,rotation,slice,Matlab,3d,Matrix,Rotation,Slice,我在matlab中有一个3D数据矩阵,但我想从该矩阵中提取任意旋转的数据片段,并将其存储为2D矩阵,我可以访问该矩阵。类似于slice()函数如何显示以任何角度切片的数据,只是我希望能够像查看数组一样查看和修改数据 我有平面枢轴点的坐标以及旋转角度(在x、y和z轴上),我还计算了平面的方程式,形式如下: Ax + By + Cz = D 可以提取一个只包含该平面上数据的3D矩阵,但我不知道如何将其转换为一个简单的2D数组 另一种方法是以与平面角度相反的方向旋转源矩阵,以便将数据平面与XY轴对齐

我在matlab中有一个3D数据矩阵,但我想从该矩阵中提取任意旋转的数据片段,并将其存储为2D矩阵,我可以访问该矩阵。类似于slice()函数如何显示以任何角度切片的数据,只是我希望能够像查看数组一样查看和修改数据

我有平面枢轴点的坐标以及旋转角度(在x、y和z轴上),我还计算了平面的方程式,形式如下:

Ax + By + Cz = D
可以提取一个只包含该平面上数据的3D矩阵,但我不知道如何将其转换为一个简单的2D数组

另一种方法是以与平面角度相反的方向旋转源矩阵,以便将数据平面与XY轴对齐,并简单地提取矩阵的该部分,但我不知道这样旋转矩阵是否可行

我希望其他地方没有回答这个问题,我已经用谷歌搜索了一整天,但没有一个问题和我的问题完全匹配


谢谢

啊哈!可能是我自己解决的

为了生成平面方程,我使用旋转矩阵旋转法向量(0,0,1),然后找到D。如果我也旋转以下向量:

(1,0,0) //step in the x direction of our 2D array

我将使用渐变来表示在我移动到数组中的下一列或下一行之前,x,y,z中的坐标必须改变多少

我将尽快模拟这个问题,并将其标记为有效的答案

编辑:好的,稍微修改一下,当我旋转向量时,我还应该旋转3D空间中代表xyz坐标x=0,y=0,z=0的点(虽然我是围绕结构的中心旋转的,所以它实际上是-sizex/2,-sizey/2,-sizez/2,其中size是数据的大小,然后我只需在旋转后向每个坐标添加size/2,将其转换回应该的位置)

现在,当我增加2D数组的x坐标时,3D中的渐变会发生变化,当我增加y坐标时,渐变会发生变化,我可以简单地循环所有可能的x和y坐标(对于50x50x50数组,生成的数组将是50x50,对于不规则尺寸,我不确定它将是什么,我最终需要计算出来)在我的2D数组中,计算数据中我平面上生成的3D坐标。旋转的角点值作为起点。万岁

我要做一个很好的测试,包括所有角度,然后我会批准这个答案,你可以看一下。我认为这个函数与你试图解决的问题类似。


给定的平面大小、平面中心点和平面法线,即[A、B、C]。它还输出平面上每个像素的体积索引和坐标。

是否只需要正好落在平面上的数据(通常是非常少量的数据点)或者你想插值数据?我想返回最近的单元格,而不是插值,尽管稍后会考虑插值。很明显,你有一个3个索引的矩阵
a[I,j,k]=a_ijk
,你想创建一个2个索引的数组
B[u,v]=b_uv
其中
u
v
i
j
k
世界的平面/切片上的坐标?(所有索引都是整数)还有,
ijk
对应于
u=1
v=1
(0,1,0) //step in the y direction of our 2D array