Introduction to Patch Objects
What Are Patch Objects?
A patch graphics object is composed of one or more polygons that may or may not be connected. Patches are useful for modeling real-world objects such as airplanes or automobiles, and for drawing 2- or 3-D polygons of arbitrary shape.
In contrast, surface objects are rectangular grids of quadrilaterals and are better suited for displaying planar topographies such as the values of mathematical functions of two variables, the contours of data in a rectangular plane, or parameterized surfaces such as spheres.
A number of MATLAB® functions create patch objects — fill
, fill3
, isosurface
, isocaps
, some of the contour
functions, and patch
. This section concentrates on use of the patch
function.
You define a patch by specifying the coordinates of its vertices and some form of color data. Patches support a variety of coloring options that are useful for visualizing data superimposed on geometric shapes.
There are two ways to specify a patch:
Specify the coordinates of the vertices of each polygon, which are connected to form the patch.
Specify the coordinates of each unique vertex and a matrix that specifies how to connect these vertices to form the faces. This technique is preferred for multifaceted patches because it generally requires less data to define the patch; vertices shared by more than one face need be defined only once. For more information, see Multifaceted Patches.
Behavior of the patch Function
There are two forms of the patch
function -- high-level syntax and low-level syntax. The behavior of the patch
function differs somewhat depending on which syntax you use.
High-Level Syntax
When you use the high-level syntax, MATLAB automatically determines how to color each face based on the color data you specify. The high-level syntax enables you to omit the property names for the x-, y-, and z-coordinates and the color data, as long as you specify these arguments in the correct order.
patch(x-coordinates,y-coordinates,z-coordinates,colordata)
However, you must specify color data so MATLAB can determine what type of coloring to use. If you do not specify color data, MATLAB returns an error.
x = [0 1 1 0];
y = [0 0 1 1];
patch(x,y)
Error using patch
Not enough input arguments.
Low-Level Syntax
The low-level syntax accepts only property name/property value pairs as arguments and does not automatically color the faces unless you also change the value of the FaceColor
property. For example, the statement
patch('XData',x,'YData',y)
draws a patch with black face color because the factory default value for the FaceColor
property is the color black.
get(groot,'FactoryPatchFaceColor') ans = 0 0 0
See the list of Patch Properties in the MATLAB Function Reference and the get
command for information on how to obtain the factory and user default values for properties.
Interpreting the Color Argument
When you use the high-level syntax, MATLAB interprets the third (or fourth if there are z-coordinates) argument as color data. If you intend to define a patch with x-, y-, and z-coordinates, but leave out the color, MATLAB interprets the z-coordinates as color data, and then draws a 2-D patch. For example,
patch(x,y,1:length(x))
draws a patch with all vertices at z = 0, colored by interpolating the vertex colors (since there is one color for each vertex), whereas
patch(x,y,1:length(x),'y')
draws a patch with vertices at increasing values of z, colored yellow.
How Patch Data Relates to a Colormap provides more information on options for coloring patches.
Creating a Single Polygon
A polygon is simply a patch with one face. To create a polygon, specify the coordinates of the vertices and color data with a statement of the form
patch(x-coordinates,y-coordinates,[z-coordinates],colordata)
For example, these statements display a 10-sided polygon with a yellow face enclosed by a black edge. The axis
equal
command produces a correctly proportioned polygon.
t = 0:pi/5:2*pi; figure patch(sin(t),cos(t),'y') axis equal
The first and last vertices need not coincide; MATLAB automatically closes each polygonal face of the patch. In fact, it is generally better to define each vertex only once, particularly if you are using interpolated face coloring.
Interpolated Face Colors
You can control many aspects of the patch coloring. For example, instead of specifying a single color, provide a range of numerical values that map the color at each vertex to a color in the figure colormap.
a = t(1:length(t)-1); %remove redundant vertex definition figure patch(sin(a),cos(a),1:length(a),'FaceColor','interp') axis equal
MATLAB now interpolates the colors across the face of the patch. You can color the edges of the patch the same way, by setting the edge colors to be interpolated. The command is
patch(sin(a),cos(a),1:length(a),'EdgeColor','interp')
How Patch Data Relates to a Colormap provides more information on options for coloring patches.