使用三维阵列的简单立方晶格

时间:2014-10-30 04:09:57

标签: arrays image matlab plot 3d

我想用MATLAB绘制一个简单的立方晶格。

我已阅读How to plot 3D grid (cube) in Matlab但是,我想为每个小立方体着色。

我在MATLAB中有一个三维数组,例如,

cube(:,:,1) = [1 0 1
               0 1 1
               1 1 0]
cube(:,:,2) = [0 0 1
               1 1 1
               0 1 0]
cube(:,:,3) = [1 1 1
               0 1 1
               1 0 1]

如何使用此数组绘制一个简单的立方晶格,其中cube(:,:,1)表示立方晶格的第一层,cube(:,:,2)表示二层,cube(:,:,3)表示三层

0表示一个小的白色立方体,而1表示一个小的黑色立方体。

期望的结果是这样的:http://www.instructables.com/id/Puzzle-Cube/
enter image description here

1 个答案:

答案 0 :(得分:4)

我找不到更简单的东西,所以这就是它!

C = randi(2,[3 3 3])-1;
colorC = char(repmat('k',[3 3 3]));
colorC(C == 0) = 'y';
figure(1);
for x = 0 : 2
for y = 0 : 2
for z = 0 : 2
     vert = [1 1 0; 
             0 1 0; 
             0 1 1; 
             1 1 1; 
             0 0 1;
             1 0 1; 
             1 0 0;
             0 0 0];
     vert(:,1) = vert(:,1) + x;
     vert(:,2) = vert(:,2) + y;
     vert(:,3) = vert(:,3) + z;
     fac = [1 2 3 4; 
            4 3 5 6; 
            6 7 8 5; 
            1 2 8 7; 
            6 7 1 4; 
            2 3 5 8];
     patch('Faces',fac,'Vertices',vert,'FaceColor',colorC(x + 1, y + 1, z + 1)); 
     axis([0, 3, 0, 3, 0, 3]);
     alpha('color');
     alphamap('rampdown');
     axis equal
     hold on
end
end
end

给你这个,

enter image description here

如果您删除alpha('color');alphamap('rampdown');并使用axis off,则会获得,

enter image description here