Main Content

多面补片

示例 - 定义立方体

立方体由八个顶点定义,它们形成六个面。下图显示了定义边长为一个单位的立方体的各个顶点的 xyz 坐标。

如果您将 xyz 坐标参量指定为向量,它们将呈现出一个按顺序连接各点的多边形。如果这些参量是矩阵,MATLAB® 会为每一列绘制一个多边形,从而形成一个具有多个面的补片。这些面不需要连接,并且可以自相交。

您也可以指定每个唯一顶点的坐标以及将它们连接成面的顺序。本节中的示例对这两种方法均进行了说明。

指定 X、Y 和 Z 坐标

六个面中每个面都有四个顶点。由于不需要闭合每个多边形(即第一个和最后一个顶点不需要相同),因此可以为每个 xyz 坐标使用一个 4×6 矩阵来定义该立方体。

矩阵的每一列指定一个不同的面。虽然只有八个顶点,但您必须指定 24 个顶点才能定义所有六个面。由于每个面与其他四个面共享顶点,因此您可以每个顶点只定义一次,然后指定连接它们的顺序以形成每个面,这样可以提高定义补片的效率。补片的 VerticesFaces 属性就是以这种方式定义补片的。

指定面和顶点

这些矩阵使用 VerticesFaces 指定立方体。

当补片包含很多面时,使用顶点/面方法可以节省大量计算机内存。这种方法需要使用正式的 patch 函数语法,为 VerticesFaces 属性显式赋值。例如,

patch('Vertices',vertex_matrix,'Faces',faces_matrix)

由于高级语法不会自动分配面或边颜色,因此您必须设置适当的属性,以生成面和边的颜色不是默认的白色和黑色的补片。

面的单一着色

面的单一着色是为每个面指定一种颜色的结果。例如,下面的语句使用顶点/面方法和 FaceVertexCData 属性来定义颜色,为每个面指定一种颜色并将 FaceColor 属性设置为 flat

vert = [0 0 0;1 0 0;1 1 0;0 1 0;0 0 1;1 0 1;1 1 1;0 1 1];
fac = [1 2 6 5;2 3 7 6;3 4 8 7;4 1 5 8;1 2 3 4;5 6 7 8];
patch('Vertices',vert,'Faces',fac,...
      'FaceVertexCData',hsv(6),'FaceColor','flat')

调整坐标区:

view(3)
axis vis3d

由于使用 FaceVertexCData 属性指定的真彩色与 MATLAB 颜色图(即由 RGB 值组成的 n×3 数组)的格式相同,因此本示例使用 hsv 颜色图生成单一着色所需的六种颜色。

要将面颜色映射到当前颜色图,需要为 FaceVertexCData 属性指定一个 n×1 数组:

patch('Vertices',vert,'Faces',fac,...
      'FaceVertexCData',(1:6)','FaceColor','flat')

调整坐标区:

view(3)
axis vis3d

面的插补着色

面的插补着色意味着每个面的顶点颜色定义从一个顶点到下一个顶点的颜色过渡。要在顶点之间插补颜色,必须为每个顶点指定一种颜色并将 FaceColor 属性设置为 interp

patch('Vertices',vert,'Faces',fac,...
      'FaceVertexCData',hsv(8),'FaceColor','interp')

调整坐标区:

view(3)
axis vis3d

生成一个通过顶点的颜色对每个面进行插补着色的立方体。

要使用 x、y、z、c 方法指定相同的着色,c 必须是一个 m×n×3 数组,其中 x、y 和 z 的维度为 m×n

下图显示了 FaceVertexCDataCData 属性之间的对应关系。

补片数据与颜色图的关系中详细介绍了着色方法。