多面补片
示例 - 定义立方体
立方体由八个顶点定义,它们形成六个面。下图显示了定义边长为一个单位的立方体的各个顶点的 x、y 和 z 坐标。
如果您将 x、y 和 z 坐标参量指定为向量,它们将呈现出一个按顺序连接各点的多边形。如果这些参量是矩阵,MATLAB® 会为每一列绘制一个多边形,从而形成一个具有多个面的补片。这些面不需要连接,并且可以自相交。
您也可以指定每个唯一顶点的坐标以及将它们连接成面的顺序。本节中的示例对这两种方法均进行了说明。
指定 X、Y 和 Z 坐标
六个面中每个面都有四个顶点。由于不需要闭合每个多边形(即第一个和最后一个顶点不需要相同),因此可以为每个 x、y 和 z 坐标使用一个 4×6 矩阵来定义该立方体。
矩阵的每一列指定一个不同的面。虽然只有八个顶点,但您必须指定 24 个顶点才能定义所有六个面。由于每个面与其他四个面共享顶点,因此您可以每个顶点只定义一次,然后指定连接它们的顺序以形成每个面,这样可以提高定义补片的效率。补片的 Vertices
和 Faces
属性就是以这种方式定义补片的。
指定面和顶点
这些矩阵使用 Vertices
和 Faces
指定立方体。
当补片包含很多面时,使用顶点/面方法可以节省大量计算机内存。这种方法需要使用正式的 patch
函数语法,为 Vertices
和 Faces
属性显式赋值。例如,
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。
下图显示了 FaceVertexCData
和 CData
属性之间的对应关系。
补片数据与颜色图的关系中详细介绍了着色方法。