Main Content

fsurf

绘制三维曲面

  • Plot 3-D surface

说明

示例

fsurf(f) 在默认区间 [-5 5](对于 xy)为函数 z = f(x,y) 创建曲面图。

fsurf(f,xyinterval) 将在指定区间绘图。要对 xy 使用相同的区间,请将 xyinterval 指定为 [min max] 形式的二元素向量。要使用不同的区间,请指定 [xmin xmax ymin ymax] 形式的四元素向量。

示例

fsurf(funx,funy,funz) 在默认区间 [-5 5](对于 uv)绘制由 x = funx(u,v)y = funy(u,v)z = funz(u,v) 定义的参数化曲面。

fsurf(funx,funy,funz,uvinterval) 将在指定区间绘图。要对 uv 使用相同的区间,请将 uvinterval 指定为 [min max] 形式的二元素向量。要使用不同的区间,请指定 [umin umax vmin vmax] 形式的四元素向量。

fsurf(___,LineSpec) 设置线型、标记符号和曲面颜色。例如,'-r' 指定红色线条。在前面的任何输入参量组合之后使用此选项。

示例

fsurf(___,Name,Value) 使用一个或多个名称-值对组参量指定曲面属性。在上述语法中的任何输入参量组合后使用此选项。

fsurf(ax,___) 将图形绘制到 ax 指定的坐标区而不是当前坐标区 (gca) 中。

示例

fs = fsurf(___) 返回 FunctionSurface 对象或 ParameterizedFunctionSurface 对象,具体情况取决于输入。使用 fs 来查询和修改特定曲面的属性。有关属性列表,请参阅 FunctionSurface 属性ParameterizedFunctionSurface 属性

示例

全部折叠

在默认区间 -5<x<5-5<y<5 绘制表达式 sin(x)+cos(y)

fsurf(@(x,y) sin(x)+cos(y))

绘制分段表达式

erf(x)+cos(y)-5<x<0sin(x)+cos(y)0<x<5

区间为 -5<y<5.

指定绘图区间为 fsurf 的第二个输入参量。在相同坐标区的不同区间绘制多个曲面时,坐标轴范围会调整以包括所有数据。

f1 = @(x,y) erf(x)+cos(y);
fsurf(f1,[-5 0 -5 5])
hold on
f2 = @(x,y) sin(x)+cos(y);
fsurf(f2,[0 5 -5 5])
hold off

绘制参数化曲面

x=rcos(u)sin(v)y=rsin(u)sin(v)z=rcos(v)wherer=2+sin(7u+5v)

对于 0<u<2π0<v<π。使用 camlight 为曲面添加光。

r = @(u,v) 2 + sin(7.*u + 5.*v);
funx = @(u,v) r(u,v).*cos(u).*sin(v);
funy = @(u,v) r(u,v).*sin(u).*sin(v);
funz = @(u,v) r(u,v).*cos(v);
fsurf(funx,funy,funz,[0 2*pi 0 pi]) 
camlight

在从 -2π2π 的区间为 xy 绘制三维曲面 ysin(x)-xcos(y)。添加标题和轴标签,并显示轴轮廓。

fsurf(@(x,y) y.*sin(x)-x.*cos(y),[-2*pi 2*pi])
title('ysin(x) - xcos(y) for x and y in [-2\pi,2\pi]')
xlabel('x');
ylabel('y');
zlabel('z');
box on

使用坐标区对象的 XTickLabelXTick 属性设置 x 轴刻度值和关联的标签。使用 gca 访问坐标区对象。按照同样的方式设置 y 轴刻度值和关联的标签。

ax = gca;
ax.XTick = -2*pi:pi/2:2*pi;
ax.XTickLabel = {'-2\pi','-3\pi/2','-\pi','-\pi/2','0',...
    '\pi/2','\pi','3\pi/2','2\pi'};

ax.YTick = -2*pi:pi/2:2*pi;
ax.YTickLabel = {'-2\pi','-3\pi/2','-\pi','-\pi/2','0',...
    '\pi/2','\pi','3\pi/2','2\pi'};

使用不同的线型为不同的 v 值绘制参数化曲面 x=usin(v)y=-ucos(v)z=v。对于 -5<v<-2,使用绿色虚线绘制曲面边。对于 -2<v<2,通过将 EdgeColor 属性设置为 'none' 来关闭边。

funx = @(u,v) u.*sin(v);
funy = @(u,v) -u.*cos(v);
funz = @(u,v) v;

fsurf(funx,funy,funz,[-5 5 -5 -2],'--','EdgeColor','g')
hold on
fsurf(funx,funy,funz,[-5 5 -2 2],'EdgeColor','none')
hold off

绘制参数化曲面

x=e-|u|/10sin(5|v|)y=e-|u|/10cos(5|v|)z=u.

将参数化函数曲面对象指定给变量。

x = @(u,v) exp(-abs(u)/10).*sin(5*abs(v));
y = @(u,v) exp(-abs(u)/10).*cos(5*abs(v));
z = @(u,v) u;
fs = fsurf(x,y,z)

fs = 
  ParameterizedFunctionSurface with properties:

    XFunction: @(u,v)exp(-abs(u)/10).*sin(5*abs(v))
    YFunction: @(u,v)exp(-abs(u)/10).*cos(5*abs(v))
    ZFunction: @(u,v)u
    EdgeColor: [0 0 0]
    LineStyle: '-'
    FaceColor: 'interp'

  Use GET to show all properties

通过设置对象的 URange 属性,将 u 的绘图区间更改为 [-30 30]。通过将 FaceAlpha 属性设置为 0(透明)到 1(不透明)之间的值,为曲面添加透明度。

fs.URange = [-30 30];
fs.FaceAlpha = .5;

通过将 'ShowContours' 选项设置为 'on',显示曲面图下的等高线。

f = @(x,y) 3*(1-x).^2.*exp(-(x.^2)-(y+1).^2)...
    - 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2)...
    - 1/3*exp(-(x+1).^2 - y.^2);
fsurf(f,[-3 3],'ShowContours','on')

使用 'MeshDensity' 选项控制曲面图的分辨率。增大 'MeshDensity' 可以使绘图更平滑、更准确,而减小该值可以提高绘图速度。

在一个分块图布局中创建两个绘图。在第一个绘图中,显示参数化曲面 x=sin(s)y=cos(s)z=(t/10)sin(1/s)。曲面存在很大间隙。要解决此问题,可在第二个绘图中将 'MeshDensity' 增大到 40fsurf 将填补间隙,表明增大 'MeshDensity' 可以提高分辨率。

tiledlayout(2,1)
nexttile
fsurf(@(s,t) sin(s), @(s,t) cos(s), @(s,t) t/10.*sin(1./s))
view(-172,25)
title('Default MeshDensity = 35')

nexttile
fsurf(@(s,t) sin(s), @(s,t) cos(s),...
    @(s,t) t/10.*sin(1./s),'MeshDensity',40)

view(-172,25)
title('Increased MeshDensity = 40')

输入参数

全部折叠

要绘制的三维函数,指定为命名或匿名函数的函数句柄。

指定 z = f(x,y) 形式的函数。该函数必须接受两个矩阵输入参量,并返回大小相同的矩阵输出参量。为获得最佳性能,应使用数组运算符而不是矩阵运算符。例如,使用 .* (times) 而不是 * (mtimes)。

示例: f = @(x,y) sin(x) + cos(y);

xy 的绘图区间,指定为下列形式之一:

  • [min max] 形式的向量 - 对 xy 都使用区间 [min max]

  • [xmin xmax ymin ymax] 形式的向量 - 对 x 使用区间 [xmin xmax],对 y 使用区间 [ymin ymax]

x 坐标的参数化函数,指定为命名或匿名函数的函数句柄。

指定 x = funx(u,v) 形式的函数。该函数必须接受两个矩阵输入参量,并返回大小相同的矩阵输出参量。为获得最佳性能,应使用数组运算符而不是矩阵运算符。例如,使用 .* (times) 而不是 * (mtimes)。

示例: funx = @(u,v) u.*sin(v);

y 坐标的参数化函数,指定为命名或匿名函数的函数句柄。

指定 y = funy(u,v) 形式的函数。该函数必须接受两个矩阵输入参量,并返回大小相同的矩阵输出参量。为获得最佳性能,应使用数组运算符而不是矩阵运算符。例如,使用 .* (times) 而不是 * (mtimes)。

示例: funy = @(t) @(u,v) -u.*cos(v);

z 坐标的参数化函数,指定为命名或匿名函数的函数句柄。

指定 z = funz(u,v) 形式的函数。该函数必须接受两个矩阵输入参量,并返回大小相同的矩阵输出参量。为获得最佳性能,应使用数组运算符而不是矩阵运算符。例如,使用 .* (times) 而不是 * (mtimes)。

示例: funz = @(u,v) v;

uv 的绘图区间,指定为下列形式之一:

  • [min max] 形式的向量 - 对 uv 都使用区间 [min max]

  • [umin umax vmin vmax] 形式的向量 - 对 u 使用区间 [umin umax],对 v 使用区间 [vmin vmax]

坐标区对象。如果您不指定坐标区对象,则 fsurf 使用当前坐标区。

线型、标记和颜色,指定为包含符号的字符串标量或字符向量。符号可以按任意顺序显示。您不需要同时指定所有三个特征(线型、标记和颜色)。例如,如果忽略线型,只指定标记,则绘图只显示标记,不显示线条。

示例: "--or" 是带有圆形标记的红色虚线。

线型描述表示的线条
"-"实线

Sample of solid line

"--"虚线

Sample of dashed line

":"点线

Sample of dotted line

"-."点划线

Sample of dash-dotted line, with alternating dashes and dots

标记描述生成的标记
"o"圆圈

Sample of circle marker

"+"加号

Sample of plus sign marker

"*"星号

Sample of asterisk marker

"."

Sample of point marker

"x"叉号

Sample of cross marker

"_"水平线条

Sample of horizontal line marker

"|"垂直线条

Sample of vertical line marker

"square"方形

Sample of square marker

"diamond"菱形

Sample of diamond marker

"^"上三角

Sample of upward-pointing triangle marker

"v"下三角

Sample of downward-pointing triangle marker

">"右三角

Sample of right-pointing triangle marker

"<"左三角

Sample of left-pointing triangle marker

"pentagram"五角形

Sample of pentagram marker

"hexagram"六角形

Sample of hexagram marker

颜色名称短名称RGB 三元组外观
"red""r"[1 0 0]

Sample of the color red

"green""g"[0 1 0]

Sample of the color green

"blue""b"[0 0 1]

Sample of the color blue

"cyan" "c"[0 1 1]

Sample of the color cyan

"magenta""m"[1 0 1]

Sample of the color magenta

"yellow""y"[1 1 0]

Sample of the color yellow

"black""k"[0 0 0]

Sample of the color black

"white""w"[1 1 1]

Sample of the color white

名称-值参数

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: 'Marker','o','MarkerFaceColor','red'

此处所列的属性只是一部分。有关完整列表,请参阅 FunctionSurface 属性ParameterizedFunctionSurface 属性

每个方向上的计算点数,以数值形式指定。默认值为 35。由于 fsurf 对象使用自适应计算,因此实际的计算点数更大。

示例: 100

在绘图下显示等高线图,指定为 'on''off',或者指定为数值或逻辑值 1 (true) 或 0 (false)。值 'on' 等效于 true,'off' 等效于 false。因此,您可以使用此属性的值作为逻辑值。该值存储为 matlab.lang.OnOffSwitchState 类型的 on/off 逻辑值。

线条颜色,指定为 'interp'、RGB 三元组、十六进制颜色代码、颜色名称或短名称。默认的 RGB 三元组值 [0 0 0] 与黑色对应。值 'interp' 将基于 ZData 的值为边着色。

对于自定义颜色,请指定 RGB 三元组或十六进制颜色代码。

  • RGB 三元组是包含三个元素的行向量,其元素分别指定颜色中红、绿、蓝分量的强度。强度值必须位于 [0,1] 范围内,例如 [0.4 0.6 0.7]

  • 十六进制颜色代码是字符串标量或字符向量,以井号 (#) 开头,后跟三个或六个十六进制数字,范围可以是 0F。这些值不区分大小写。因此,颜色代码 "#FF8800""#ff8800""#F80""#f80" 是等效的。

此外,还可以按名称指定一些常见的颜色。下表列出了命名颜色选项、等效 RGB 三元组和十六进制颜色代码。

颜色名称短名称RGB 三元组十六进制颜色代码外观
"red""r"[1 0 0]"#FF0000"

Sample of the color red

"green""g"[0 1 0]"#00FF00"

Sample of the color green

"blue""b"[0 0 1]"#0000FF"

Sample of the color blue

"cyan" "c"[0 1 1]"#00FFFF"

Sample of the color cyan

"magenta""m"[1 0 1]"#FF00FF"

Sample of the color magenta

"yellow""y"[1 1 0]"#FFFF00"

Sample of the color yellow

"black""k"[0 0 0]"#000000"

Sample of the color black

"white""w"[1 1 1]"#FFFFFF"

Sample of the color white

"none"不适用不适用不适用无颜色

以下是 MATLAB® 在许多类型的绘图中使用的默认颜色的 RGB 三元组和十六进制颜色代码。

RGB 三元组十六进制颜色代码外观
[0 0.4470 0.7410]"#0072BD"

Sample of RGB triplet [0 0.4470 0.7410], which appears as dark blue

[0.8500 0.3250 0.0980]"#D95319"

Sample of RGB triplet [0.8500 0.3250 0.0980], which appears as dark orange

[0.9290 0.6940 0.1250]"#EDB120"

Sample of RGB triplet [0.9290 0.6940 0.1250], which appears as dark yellow

[0.4940 0.1840 0.5560]"#7E2F8E"

Sample of RGB triplet [0.4940 0.1840 0.5560], which appears as dark purple

[0.4660 0.6740 0.1880]"#77AC30"

Sample of RGB triplet [0.4660 0.6740 0.1880], which appears as medium green

[0.3010 0.7450 0.9330]"#4DBEEE"

Sample of RGB triplet [0.3010 0.7450 0.9330], which appears as light blue

[0.6350 0.0780 0.1840]"#A2142F"

Sample of RGB triplet [0.6350 0.0780 0.1840], which appears as dark red

线型,指定为下表中列出的选项之一。

线型描述表示的线条
"-"实线

Sample of solid line

"--"虚线

Sample of dashed line

":"点线

Sample of dotted line

"-."点划线

Sample of dash-dotted line, with alternating dashes and dots

"none"无线条无线条

线宽,指定为以磅为单位的正值,其中 1 磅 = 1/72 英寸。如果该线条具有标记,则线条宽度也会影响标记边。

线宽不能小于像素的宽度。如果将线宽设置为小于系统上像素宽度的值,则线条显示为一个像素的宽度。

标记符号,指定为下表中列出的值之一。默认情况下,对象不显示标记。指定标记符号可在每个数据点或顶点添加标记。

标记描述生成的标记
"o"圆圈

Sample of circle marker

"+"加号

Sample of plus sign marker

"*"星号

Sample of asterisk marker

"."

Sample of point marker

"x"叉号

Sample of cross marker

"_"水平线条

Sample of horizontal line marker

"|"垂直线条

Sample of vertical line marker

"square"方形

Sample of square marker

"diamond"菱形

Sample of diamond marker

"^"上三角

Sample of upward-pointing triangle marker

"v"下三角

Sample of downward-pointing triangle marker

">"右三角

Sample of right-pointing triangle marker

"<"左三角

Sample of left-pointing triangle marker

"pentagram"五角形

Sample of pentagram marker

"hexagram"六角形

Sample of hexagram marker

"none"无标记不适用

标记大小,指定为以磅为单位的正值,其中 1 磅 = 1/72 英寸。

输出参量

全部折叠

一个或多个 FunctionSurfaceParameterizedFunctionSurface 对象,以标量或向量形式返回。

  • 如果使用 fsurf(f) 语法或此语法的变体,fsurf 将返回 FunctionSurface 对象。

  • 如果使用 fsurf(funx,funy,funz) 语法或此语法的变体,fsurf 将返回 ParameterizedFunctionSurface 对象。

您可以使用这些对象来查询和修改特定曲面的属性。有关属性列表,请参阅 FunctionSurface 属性ParameterizedFunctionSurface 属性

版本历史记录

在 R2016a 中推出