Main Content

surfl

具有基于颜色图的光照的曲面图

  • Surface plot with colormap-based lighting

说明

示例

surfl(X,Y,Z) 创建一个带光源高光的三维曲面图。该函数将矩阵 Z 中的值绘制为由 XY 定义的 x-y 平面中的网格上方的高度。该函数使用光源的默认方向和着色模型的默认光照系数。这会将曲面的颜色数据设置为曲面的反射颜色。

由于曲面法向量的计算方式的原因,surfl 需要大小至少为 3×3 的矩阵。

surfl(Z) 创建曲面,并将 Z 中元素的列索引和行索引用作 x 坐标和 y 坐标。

示例

surfl(___,'light') 创建一个由 MATLAB® 光源对象提供高光的曲面。这与默认的基于颜色图的光照方法产生的结果不同。将 'light' 对象指定为最后一个输入参量。

示例

surfl(___,s) 还指定光源的方向。

示例

surfl(X,Y,Z,s,k) 还指定反射常量。

surfl(ax,___) 将图形绘制到 ax 指定的坐标区中,而不是当前坐标区中。指定坐标区作为第一个输入参量。

示例

s = surfl(___) 将返回一个图曲面对象。如果使用 'light' 选项将光源指定为光源对象,则 s 将以图形数组形式返回,其中包含图曲面对象和光源对象。在创建曲面和光源对象后,可使用 s 对其进行修改。有关属性列表,请参阅 Surface 属性Light 属性

示例

全部折叠

创建三个相同大小的矩阵。然后使用基于颜色图的光照将它们绘制为一个曲面。曲面使用 Z 表示高度,并同时使用 Z 和光源两者来定义颜色。

[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
surfl(X,Y,Z)

创建三个相同大小的矩阵。然后将它们绘制为带有来自 MATLAB® 光源对象的高光的曲面。曲面使用 Z 表示高度,并同时使用 Z 和光源对象两者来定义颜色。该函数返回包含曲面对象和光照对象的数组。将它赋值给变量 sl

[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
sl = surfl(X,Y,Z,'light');

sl 进行索引,以访问和修改所创建的曲面对象和光源对象的属性。可通过 sl(1) 访问曲面图,通过 sl(2) 访问光源对象。例如,通过设置光源对象的 Color 属性来更改光源颜色。

sl(2).Color = 'r';

创建三个大小相同的矩阵以绘制为一个曲面。指定光源的方向,使方位角为 45 度,仰角为 20 度。通过增加环境光贡献度和减少漫反射与镜面反射贡献度来提高曲面的反射值。将曲面对象赋给变量 sl

[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
s = [-45 20];
k = [.65 .4 .3 10];

使用光源向量和反射向量绘制数据。

sl = surfl(X,Y,Z,s,k);

在创建曲面对象之后可使用 sl 访问并修改其属性。例如,通过设置 EdgeColor 属性来隐藏边。

sl.EdgeColor = 'none';

输入参数

全部折叠

x 坐标,指定为大小与 Z 相同的矩阵或长度为 n 的向量,其中 [m,n] = size(Z)。如果未指定 XY 的值,surfl 将使用向量 (1:n)(1:m)

您可以使用 meshgrid 函数创建 XY 矩阵。

Surface 对象的 XData 属性存储 x 坐标。

示例: X = 1:10

示例: X = [1 2 3; 1 2 3; 1 2 3]

示例: [X,Y] = meshgrid(-5:0.5:5)

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

y 坐标,指定为大小与 Z 相同的矩阵或长度为 m 的向量,其中 [m,n] = size(Z)。如果未指定 XY 的值,surfl 将使用向量 (1:n)(1:m)

您可以使用 meshgrid 函数创建 XY 矩阵。

曲面对象的 YData 属性存储 y 坐标。

示例: Y = 1:10

示例: Y = [1 1 1; 2 2 2; 3 3 3]

示例: [X,Y] = meshgrid(-5:0.5:5)

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

z 坐标,指定为矩阵。Z 必须有至少两行两列。

曲面对象的 ZData 属性存储 z 坐标。

示例: Z = [1 2 3; 4 5 6]

示例: Z = sin(x) + cos(y)

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

从曲面到光源的方向,指定为一个二元素或三元素向量。该向量的形式为 [sx sy sz][azimuth elevation]。默认方向是从当前视图方向逆时针旋转 45° 的角。

反射常量,指定为一个四元素向量。该向量以 [ka kd ks shine] 的形式定义环境光、漫反射、镜面反射和镜面发光系数的相对贡献度。默认情况下,k[.55 .6 .4 10]

要在其中绘图的坐标区,指定为 axes 对象。如果未指定坐标区,则 surfl 在当前坐标区中绘图。

提示

  • XYZ 矩阵中点的排序定义参数曲面的内部和外部。要让曲面的另一侧反射光源,请使用 surfl(X',Y',Z')

扩展功能

版本历史记录

在 R2006a 之前推出