Main Content

补片对象简介

什么是补片对象?

补片图形对象由一个或多个相连或不相连的多边形组成。补片对建模真实世界对象(如飞机或汽车)以及绘制任意形状的二维或三维多边形非常有用。

相对而言,曲面对象是由四边形组成的矩形网格,更适合显示平面布局图,例如具有两个变量的数学函数的值、矩形平面中数据的等高线或者参数化曲面(如球体)。

有一些 MATLAB® 函数可以创建补片对象 - fillfill3isosurfaceisocaps、某些 contour 函数以及 patch。本节主要介绍如何使用 patch 函数。

您可以通过指定顶点坐标和某种形式的颜色数据来定义补片。补片支持各种着色选项,这些选项对于可视化几何形状上叠加的数据很有用。

指定补片的方法有两种:

  • 指定每个多边形的顶点坐标,这些顶点连接起来形成补片。

  • 指定每个唯一顶点的坐标以及一个定义如何连接这些顶点以形成面的矩阵。此方法是多面补片的首选,因为它通常需要较少的数据来定义补片,而且由多个面共享的顶点只需定义一次。有关详细信息,请参阅多面补片

patch 函数的行为

有两种形式的 patch 函数 - 高级语法和低级语法。根据您使用的语法,patch 函数的行为有所不同。

高级语法

当您使用高级语法时,MATLAB 会根据您指定的颜色数据自动确定如何为每个面着色。高级语法允许您省略 xyz 坐标以及颜色数据的属性名称,只要按正确顺序指定这些参量即可。

patch(x-coordinates,y-coordinates,z-coordinates,colordata)

但您必须指定颜色数据,这样 MATLAB 才能确定要使用的着色类型。如果不指定颜色数据,MATLAB 将返回错误。

x = [0 1 1 0];
y = [0 0 1 1];
patch(x,y)
Error using patch
Not enough input arguments.

低级语法

低级语法仅接受属性名称/属性值对组作为参量,并且不会自动为面着色,除非您还更改了 FaceColor 属性的值。例如,下面的语句

patch('XData',x,'YData',y) 

绘制一个面颜色为黑色的补片,因为 FaceColor 属性的出厂默认值为黑色。

get(groot,'FactoryPatchFaceColor')
ans =
      0     0     0

有关如何获取属性的出厂默认值和用户默认值的信息,请参阅《MATLAB 函数参考》中的 Patch 属性 列表以及 get 命令。

解释颜色参量

当您使用高级语法时,MATLAB 会将第三个(如果存在 z 坐标,则为第四个)参量解释为颜色数据。如果您打算使用 xyz 坐标来定义补片,但未指定颜色,则 MATLAB 会将 z 坐标解释为颜色数据,并绘制一个二维补片。例如,

patch(x,y,1:length(x))

将绘制一个所有顶点的 z 值均为 0 的补片,并会根据顶点颜色来插补着色(因为每个顶点一种颜色),而

patch(x,y,1:length(x),'y')

则会绘制一个各个顶点的 z 值递增的补片,颜色为黄色。

补片数据与颜色图的关系提供了有关补片着色选项的更多信息。

创建单个多边形

多边形是只有一个面的补片。要创建多边形,请按以下形式的语句指定顶点坐标和颜色数据

patch(x-coordinates,y-coordinates,[z-coordinates],colordata)

例如,下面的语句显示一个面为黄色、边为黑色的十边形。axis equal 命令会生成一个正多边形。

t = 0:pi/5:2*pi;
figure
patch(sin(t),cos(t),'y')
axis equal

第一个和最后一个顶点不需要重合,MATLAB 会自动闭合补片的每个多边形面。事实上,通常每个顶点最好只定义一次,尤其是在使用插补面着色法时。

对面进行插补着色

您可以控制补片着色的许多方面。例如,您可以提供一系列数值,将每个顶点的颜色映射到图窗颜色图中的一种颜色,而不是只指定一种颜色。

a = t(1:length(t)-1); %remove redundant vertex definition
figure
patch(sin(a),cos(a),1:length(a),'FaceColor','interp')
axis equal

MATLAB 现在可在补片的整个面上进行颜色插值。同样,您可以将边的颜色指定为插补着色来为补片的边着色。命令如下:

patch(sin(a),cos(a),1:length(a),'EdgeColor','interp')

补片数据与颜色图的关系提供了有关补片着色选项的更多信息。