为matlab设置冲浪最小值

时间:2012-07-31 04:34:56

标签: matlab geometry-surface

我有一个功能,它采用3D景观的体素表示,并可以绘制X-Y部分以显示景观的中间。体素表示存储在3维矩阵中,其中数字表示重要的事物。矩阵显然是

1,1,1 
2,2,2

在访问元素方面,但实际的3D位置可在以下方法中找到:

(index-1)*resolution+0.5*resolution+minPos;

其中分辨率是网格大小:

resolution
<-->
 __ __ __
|__|__|__|
 <- Min pos

和minPos是网格开始的地方。

现在就实际问题而言,我想提取这个体素表示的单个X-Y部分并将其显示为冲浪。这可以通过这样做来完成:

surf(voxel(:, :, section)) 

然而你得到了这个:

显而易见的问题是网格将从0开始,因为这是矩阵表示的方式。如何设置冲浪的最小值和单元尺寸,即网格将从最小值开始(如上所示)并具有分辨率的网格间距(如上所示)。

2 个答案:

答案 0 :(得分:1)

阅读documentation of surf,您还可以提供与您的数据点对应的x和y坐标。

surf(X,Y,Z)

X和Y可以是矢量或矩阵:

  

surf(X,Y,Z)使用Z作为颜色数据和表面高度。 XY是定义曲面的x和y分量的矢量或矩阵。如果XY是向量,length(X) = nlength(Y) = m,则为[m,n] = size(Z)。在这种情况下,表面的顶点是(X(j), Y(i), Z(i,j))三倍。要为任意域创建XY矩阵,请使用meshgrid函数

实施例

 Z=[ 0 1 2  3;
     7 6 5  4;
     8 9 10 11];

 x=[-1 0 1 2];
 y=[-2 0 2];
 surf(x,y,Z);

enter image description here 当然,你必须匹配z,x和y矩阵/向量,如doc ^^中清楚描述的那样 请记住,Z列中的元素沿y轴冲浪,Z行中的元素沿x轴冲浪。这显然可以在示例图片中看到。

解决方案

我认为您已经切换了x轴和y轴,只需转置z即可解决此问题:

s = size(voxel);
xi = (minPosX:resolution:(minPosX+resolution*s(1)-1));
yi = (minPosY:resolution:(minPosY+resolution*s(2)-1));
z = (voxel(:,:,section));

surf(xi, yi, z');

或者您选择错误的数字来构建xiyi,而应该是这样的:

xi = (minPosX:resolution:(minPosX+resolution*s(2)-1));
yi = (minPosY:resolution:(minPosY+resolution*s(1)-1));
z = (voxel(:,:,section));
surf(xi, yi, z);

答案 1 :(得分:0)

所以这很容易做到:

假设我们有一个3D矩阵“体素”;

s = size(voxel);
xi = (minPosX:resolution:(minPosX+resolution*s(1)-1));
yi = (minPosY:resolution:(minPosY+resolution*s(2)-1));
z = (voxel(:,:,section));
[x y] = meshgrid(xi, yi);
x = x';
y = y';

surf(x, y, z);

提供以下图表:

这是旋转的,这很烦人,我似乎无法让它旋转回来(我只能想象其他方式,但没关系)