在matlab中创建一个完全不透明的六面体
creating in matlab a fully opaque hexahedron
我想使用补丁函数创建一个完全不透明的六面体(一个 6 面 3d 对象,如扭曲的立方体)。下面是我的代码,(使点 #1 的 3 个相邻面,然后使其他 3 个面与其对映点相邻,因此所有 6 "patched")。但是,您所看到的透明度并没有达到预期效果。知道为什么会发生这种情况,或者有什么方法可以绕过这个问题吗?
vec=[1,2,4,3,1;1,5,6,2,1;1,5,7,3,1];
vec2=[8,4,3,7,8;8 4 2 6 8;8 6 5 7 8];
cube = [0 0 0;0 0 1;0 1 0;0 1 1; 1 0 0; 1 0 1; 1 1 0; 1 1 1];
figure
patch('Faces',[vec(1,:),vec(2,:),vec(3,:)],'Vertices',cube,'FaceColor','white','FaceAlpha',1); axis equal; cameratoolbar;
hold on
patch('Faces',[vec2(1,:),vec2(2,:),vec2(3,:)],'Vertices',cube,'FaceColor','white','FaceAlpha',1); axis equal; cameratoolbar;
这是生成的图:
(Matlab 2017a)。
您以正确的方式创建了 vec
数组,但是在将它传递给 patch()
函数时搞砸了。您可以在一个变量中连接 vec
和 vec2
。那么您的代码如下所示:
vec=[1,2,4,3,1;1,5,6,2,1;1,5,7,3,1; ...
8,4,3,7,8;8 4 2 6 8;8 6 5 7 8];
cube = [0 0 0;0 0 1;0 1 0;0 1 1; 1 0 0; 1 0 1; 1 1 0; 1 1 1];
patch('Faces',vec,'Vertices',cube,'FaceColor','white','FaceAlpha',1);
axis equal
view(-41,33);
结果显示在这里。
注意:立方体的左前侧在屏幕显示中不透明。这是八度图转PNG导出的一个bug。
我想使用补丁函数创建一个完全不透明的六面体(一个 6 面 3d 对象,如扭曲的立方体)。下面是我的代码,(使点 #1 的 3 个相邻面,然后使其他 3 个面与其对映点相邻,因此所有 6 "patched")。但是,您所看到的透明度并没有达到预期效果。知道为什么会发生这种情况,或者有什么方法可以绕过这个问题吗?
vec=[1,2,4,3,1;1,5,6,2,1;1,5,7,3,1];
vec2=[8,4,3,7,8;8 4 2 6 8;8 6 5 7 8];
cube = [0 0 0;0 0 1;0 1 0;0 1 1; 1 0 0; 1 0 1; 1 1 0; 1 1 1];
figure
patch('Faces',[vec(1,:),vec(2,:),vec(3,:)],'Vertices',cube,'FaceColor','white','FaceAlpha',1); axis equal; cameratoolbar;
hold on
patch('Faces',[vec2(1,:),vec2(2,:),vec2(3,:)],'Vertices',cube,'FaceColor','white','FaceAlpha',1); axis equal; cameratoolbar;
这是生成的图:
(Matlab 2017a)。
您以正确的方式创建了 vec
数组,但是在将它传递给 patch()
函数时搞砸了。您可以在一个变量中连接 vec
和 vec2
。那么您的代码如下所示:
vec=[1,2,4,3,1;1,5,6,2,1;1,5,7,3,1; ...
8,4,3,7,8;8 4 2 6 8;8 6 5 7 8];
cube = [0 0 0;0 0 1;0 1 0;0 1 1; 1 0 0; 1 0 1; 1 1 0; 1 1 1];
patch('Faces',vec,'Vertices',cube,'FaceColor','white','FaceAlpha',1);
axis equal
view(-41,33);
结果显示在这里。
注意:立方体的左前侧在屏幕显示中不透明。这是八度图转PNG导出的一个bug。