15.3.2.1 创建图形对象

任何图形对象基元都可以通过调用与该对象同名的函数来创建;也就是说,调用 figureaxeslinetextimagepatchsurfacelight 等函数。这些基本图形对象会自动成为当前坐标轴对象的子对象,就像启用了 hold on 一样。同样地,坐标轴会自动成为当前图形对象的子对象,而图形则会成为根对象的子对象。

如果不需要这种自动加入功能,那么务必先调用 newplot 来准备新的图形和坐标轴以供绘图。 或者,更简单的方法是调用高级图形例程,它会同时创建图形并用低级图形对象填充它。 例如,不要调用 line,而应使用 plot;或者用 surf 代替 surface;或者用 fillfill3 代替 patch

 
axes ()
axes (property, value, …)
axes (hpar, property, value, …)
axes (hax)
h = axes (…)

创建一个笛卡尔坐标轴对象并返回其句柄,或者将当前坐标轴设置为 hax

不带任何参数调用,或者带上 property/value 对调用时, 会构造一个新的坐标轴。可选参数 hpar 是一个图形句柄,用于指定新坐标轴的父对象, 可以是图形、uipanel 或 uitab。

当使用单个坐标轴句柄参数 hax 调用时,该函数会将 hax 设为当前坐标轴(由 gca 返回)。同时,它还会将 包含 hax 的图形设为当前图形(由 gcf 返回)。 最后,它会重新排列父对象的 children 属性,使坐标轴 hax 在列表中出现在所有其他坐标轴句柄之前。这使得 hax 显示在任何其他坐标轴对象的顶部(Z 轴堆叠)。此外, 它还会重排与 hax 关联的任何图例或颜色条对象,使其同样可见。

编程说明:完整的属性列表请参见 坐标轴属性

另请参阅: gcasetget

 
line ()
line (x, y)
line (x, y, z)
line ("xdata", x, "ydata", y)
line ("xdata", x, "ydata", y, "zdata", z)
line (…, property, value)
line (hax, …)
h = line (…)

根据 xy(以及可选的 z)创建一个线条对象, 并将其插入当前坐标轴。

在标准调用形式中,数据 xyz 可以是 标量、向量或矩阵。当输入为矩阵时,line 会尝试调整标量和向量的方向,以便结果能够绘制。 这要求向量的某一维度与矩阵的行数或列数相匹配。

在底层调用形式(性能提高 50%)中,数据通过名称指定 (line ("xdata", x, …)),此时数据必须为 向量。如果未指定数据(line ()),则 x == y = [0, 1]

可以为线条对象指定多个属性-值对,但它们 必须成对出现。

如果仅使用 property/value 对调用,任何未指定的 属性将采用根对象上指定的默认值。

如果第一个参数 hax 是坐标轴句柄,则将图形绘制到该坐标轴, 而不是由 gca 返回的当前坐标轴。

可选的返回值 h 是所创建线条对象的图形句柄 (或句柄向量)。

编程说明:完整的属性列表请参见 线条属性

line 函数与 plot 的不同之处在于,线条对象 在插入当前坐标轴之前不会先清除图形。

另请参阅: imagepatchrectanglesurfacetext

 
patch ()
patch (x, y, c)
patch (x, y, z, c)
patch ("Faces", faces, "Vertices", verts, …)
patch (…, "prop", val, …)
patch (…, propstruct, …)
patch (hax, …)
h = patch (…)

在当前坐标轴中创建一个补片对象,其顶点位于 (x, y) 处,颜色为 c

如果顶点是 M×N 矩阵,则每个多边形补片 有 M 个顶点,总共会创建 N 个多边形。如果某些多边形 不足 M 个顶点,请使用 NaN 表示"无顶点"。如果提供了 z 输入,则会创建三维补片。

颜色参数 c 可以有多种形式。要为所有多边形创建单一颜色的补片, 请使用字符串值(例如 "r" 表示红色)、标量值(该值按 clim 缩放 并索引到当前颜色映射中),或包含精确真彩色的三维 RGB 向量。

如果 c 是长度为 N 的向量,则第 i 个多边形的颜色通过 将条目 c(i) 按 clim 缩放后索引到当前颜色映射来确定。 更复杂的着色情况需要直接操作补片对象的属性/值对。

除了通过矩阵 xy 指定多边形之外,还可以 提供一个唯一的顶点列表,再加上由这些顶点构成的多边形面列表。 在这种情况下,"Vertices" 矩阵为 N×2(二维补片)或 N×3(三维补片)。M×N 的 "Faces" 矩阵描述了 包含 N 个顶点的 M 个多边形——每行描述一个 多边形,每个列元素是 "Vertices" 矩阵中的一个索引,用于标识一个顶点。 补片对象也可以通过直接传递属性/值对 "Vertices"/verts"Faces"/faces 作为输入来创建。

除了使用属性/值对之外,还可以通过传递一个具有相应字段名的 结构体 propstruct 来设置任何属性。

如果第一个参数 hax 是坐标轴句柄,则将图形绘制到该坐标轴, 而不是由 gca 返回的当前坐标轴。

可选的返回值 h 是所创建补片对象的图形句柄。

编程说明:

  1. 完整的属性列表请参见 补片属性。 常用的补片属性包括:"edgecolor""facecolor""faces""vertices""facevertexcdata"
  2. 混合使用 x-y-z 形式和面-顶点形式定义几何体可能导致意外的几何结果。
  3. "cdata" 颜色定义与面-顶点定义的几何体搭配使用, 或将 "facevertexcdata" 颜色定义与 x-y-z 定义的几何体搭配使用时, 可能导致意外的补片颜色结果。

另请参阅: fillgetset

 
surface (x, y, z, c)
surface (x, y, z)
surface (z, c)
surface (z)
surface (…, prop, val, …)
surface (hax, …)
h = surface (…)

根据 meshgrid 生成的矩阵 xy, 以及包含曲面 xy 坐标对应值的矩阵 z, 创建一个曲面图形对象。

如果 xy 是向量,则典型的顶点为 (x(j), y(i), z(i,j))。因此,z 的列对应 不同的 x 值,z 的行对应不同的 y 值。 如果只提供了单个输入 z,则 x 默认为 1:columns (z)y 默认为 1:rows (z)

任何属性/值输入对都将赋值给曲面对象。

如果第一个参数 hax 是坐标轴句柄,则将图形绘制到该坐标轴, 而不是由 gca 返回的当前坐标轴。

可选的返回值 h 是所创建曲面对象的图形句柄。

编程说明:完整的属性列表请参见 曲面属性

另请参阅: surfmeshpatchline

 
light ()
light (…, "prop", val, …)
light (hax, …)
h = light (…)

在当前坐标轴中或为指定坐标轴 hax 创建一个光源对象。

当坐标轴对象中存在光源对象,并且 patchsurface 对象的 "EdgeLighting""FaceLighting" 属性设置为 "none" 以外的值时,这些对象将以光照效果绘制。 光照属性支持的取值有:"none"(无光照效果)、 "flat"(对象呈现分面外观)和 "gouraud" (顶点之间光照效果的线性插值)。若光照模式设置为 "flat",则使用 "FaceNormals" 属性进行光照计算; 对于 "gouraud",则使用 "VertexNormals" 属性。

每个坐标轴最多支持八个光源对象(具体取决于实现)。

光照仅在 OpenGL 图形工具包中支持(即 "fltk""qt")。

光源对象具有以下改变图形外观的属性:

"Color": 光源的颜色。可以通过以下方式传递:

RGB 向量(例如 [1 0 0] 表示红色)或字符串(例如 "r" 表示红色)。默认颜色为白色([1 1 1])。

"Position": 光线发出的方向。指定为一个

1×3 向量。默认方向为 [1 0 1]

"Style": 此字符串定义光线是从无限远处的

光源发出("infinite")还是从局部点光源发出("local")。 默认值为 "infinite"

如果第一个参数 hax 是坐标轴句柄,则将光源对象添加到该坐标轴, 而不是由 gca 返回的当前坐标轴。

可选的返回值 h 是所创建光源对象的图形句柄。

编程说明:完整的属性列表请参见 光源属性

另请参阅: lightingmaterialpatchsurface


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-4