fsurf
绘制三维曲面

语法
说明
fsurf(
将在指定区间绘图。要对 f
,xyinterval
)x
和 y
使用相同的区间,请将 xyinterval
指定为 [min max]
形式的二元素向量。要使用不同的区间,请指定 [xmin xmax ymin ymax]
形式的四元素向量。
fsurf(
将在指定区间绘图。要对 funx
,funy
,funz
,uvinterval
)u
和 v
使用相同的区间,请将 uvinterval
指定为 [min max]
形式的二元素向量。要使用不同的区间,请指定 [umin umax vmin vmax]
形式的四元素向量。
fsurf(___,
设置线型、标记符号和曲面颜色。例如,LineSpec
)'-r'
指定红色线条。在前面的任何输入参数组合之后使用此选项。
fsurf(___,
使用一个或多个名称-值对组参数指定曲面属性。在上述语法中的任何输入参数组合后使用此选项。Name,Value
)
fsurf(
将图形绘制到 ax
,___)ax
指定的坐标区而不是当前坐标区 (gca
) 中。
返回 fs
= fsurf(___)FunctionSurface
对象或 ParameterizedFunctionSurface
对象,具体情况取决于输入。使用 fs
来查询和修改特定曲面的属性。有关属性列表,请参阅 FunctionSurface 属性 或 ParameterizedFunctionSurface 属性。
示例
表达式的三维曲面图
指定曲面图区间并绘制分段表达式
绘制分段表达式
区间为
指定绘图区间为 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
参数化曲面图
绘制参数化曲面
对于 ,。使用 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
添加标题和轴标签以及格式化刻度
在从 到 的区间为 和 绘制三维曲面 。添加标题和轴标签,并显示轴轮廓。
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
使用坐标区对象的 XTickLabel
和 XTick
属性设置 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'};
指定曲面属性
使用不同的线型为不同的 值绘制参数化曲面 、 和 。对于 ,使用绿色虚线绘制曲面边。对于 ,通过将 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 = @(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' 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'
可以使绘图更平滑、更准确,而减小该值可以提高绘图速度。
在一个分块图布局中创建两个绘图。在第一个绘图中,显示参数化曲面 、 和 。曲面存在很大间隙。要解决此问题,可在第二个绘图中将 'MeshDensity'
增大到 40
。fsurf
将填补间隙,表明增大 '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')
输入参数
f
— 要绘制的三维函数
函数句柄
要绘制的三维函数,指定为命名或匿名函数的函数句柄。
指定 z = f(x,y)
形式的函数。该函数必须接受两个矩阵输入参数,并返回大小相同的矩阵输出参数。为获得最佳性能,应使用数组运算符而不是矩阵运算符。例如,使用 .*
(times
) 而不是 * (mtimes
)。
示例: f = @(x,y) sin(x) + cos(y);
xyinterval
— x
和 y
的绘图区间
[-5 5 -5 5]
(默认) | [min max]
形式的向量 | [xmin xmax ymin ymax]
形式的向量
x
和 y
的绘图区间,指定为下列形式之一:
[min max]
形式的向量 - 对x
和y
都使用区间[min max]
。[xmin xmax ymin ymax]
形式的向量 - 对x
使用区间[xmin xmax]
,对y
使用区间[ymin ymax]
。
funx
— x 坐标的参数化函数
函数句柄
x 坐标的参数化函数,指定为命名或匿名函数的函数句柄。
指定 x = funx(u,v)
形式的函数。该函数必须接受两个矩阵输入参数,并返回大小相同的矩阵输出参数。为获得最佳性能,应使用数组运算符而不是矩阵运算符。例如,使用 .*
(times
) 而不是 * (mtimes
)。
示例: funx = @(u,v) u.*sin(v);
funy
— y 坐标的参数化函数
函数句柄
y 坐标的参数化函数,指定为命名或匿名函数的函数句柄。
指定 y = funy(u,v)
形式的函数。该函数必须接受两个矩阵输入参数,并返回大小相同的矩阵输出参数。为获得最佳性能,应使用数组运算符而不是矩阵运算符。例如,使用 .*
(times
) 而不是 * (mtimes
)。
示例: funy = @(t) @(u,v) -u.*cos(v);
funz
— z 坐标的参数化函数
函数句柄
z 坐标的参数化函数,指定为命名或匿名函数的函数句柄。
指定 z = funz(u,v)
形式的函数。该函数必须接受两个矩阵输入参数,并返回大小相同的矩阵输出参数。为获得最佳性能,应使用数组运算符而不是矩阵运算符。例如,使用 .*
(times
) 而不是 * (mtimes
)。
示例: funz = @(u,v) v;
uvinterval
— u
和 v
的绘图区间
[-5 5 -5 5]
(默认) | [min max]
形式的向量 | [umin umax vmin vmax]
形式的向量
u
和 v
的绘图区间,指定为下列形式之一:
[min max]
形式的向量 - 对u
和v
都使用区间[min max]
。[umin umax vmin vmax]
形式的向量 - 对u
使用区间[umin umax]
,对v
使用区间[vmin vmax]
。
ax
— 坐标区对象
坐标区对象
坐标区对象。如果您不指定坐标区对象,则 fsurf
使用当前坐标区。
LineSpec
— 线型、标记和颜色
字符串标量 | 字符向量
线型、标记和颜色,指定为包含符号的字符串标量或字符向量。符号可以按任意顺序显示。您不需要同时指定所有三个特征(线型、标记和颜色)。例如,如果忽略线型,只指定标记,则绘图只显示标记,不显示线条。
示例: "--or"
是带有圆形标记的红色虚线。
线型 | 描述 | 表示的线条 |
---|---|---|
"-" | 实线 |
|
"--" | 虚线 |
|
":" | 点线 |
|
"-." | 点划线 |
|
标记 | 描述 | 生成的标记 |
---|---|---|
"o" | 圆圈 |
|
"+" | 加号 |
|
"*" | 星号 |
|
"." | 点 |
|
"x" | 叉号 |
|
"_" | 水平线条 |
|
"|" | 垂直线条 |
|
"square" | 方形 |
|
"diamond" | 菱形 |
|
"^" | 上三角 |
|
"v" | 下三角 |
|
">" | 右三角 |
|
"<" | 左三角 |
|
"pentagram" | 五角形 |
|
"hexagram" | 六角形 |
|
颜色名称 | 短名称 | RGB 三元组 | 外观 |
---|---|---|---|
"red" | "r" | [1 0 0] | |
"green" | "g" | [0 1 0] | |
"blue" | "b" | [0 0 1] | |
"cyan" | "c" | [0 1 1] | |
"magenta" | "m" | [1 0 1] | |
"yellow" | "y" | [1 1 0] | |
"black" | "k" | [0 0 0] | |
"white" | "w" | [1 1 1] | |
名称-值参数
将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参数名称,Value
是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: 'Marker','o','MarkerFaceColor','red'
此处所列的属性只是一部分。有关完整列表,请参阅 FunctionSurface 属性 或 ParameterizedFunctionSurface 属性。
MeshDensity
— 每个方向上的计算点数
35 (默认) | 数字
每个方向上的计算点数,以数值形式指定。默认值为 35
。由于 fsurf
对象使用自适应计算,因此实际的计算点数更大。
示例: 100
ShowContours
— 在绘图下显示等高线图
'off'
(默认) | on/off 逻辑值
在绘图下显示等高线图,指定为 'on'
或 'off'
,或者指定为数值或逻辑值 1
(true
) 或 0
(false
)。值 'on'
等效于 true,'off'
等效于 false
。因此,您可以使用此属性的值作为逻辑值。该值存储为 matlab.lang.OnOffSwitchState
类型的 on/off 逻辑值。
EdgeColor
— 线条颜色
[0 0 0]
(默认) | 'interp'
| RGB 三元组 | 十六进制颜色代码 | 'r'
| 'g'
| 'b'
| ...
线条颜色,指定为 'interp'
、RGB 三元组、十六进制颜色代码、颜色名称或短名称。默认的 RGB 三元组值 [0 0 0]
与黑色对应。值 'interp'
将基于 ZData
的值为边着色。
对于自定义颜色,请指定 RGB 三元组或十六进制颜色代码。
RGB 三元组是包含三个元素的行向量,其元素分别指定颜色中红、绿、蓝分量的强度。强度值必须位于
[0,1]
范围内,例如[0.4 0.6 0.7]
。十六进制颜色代码是字符串标量或字符向量,以井号 (
#
) 开头,后跟三个或六个十六进制数字,范围可以是0
到F
。这些值不区分大小写。因此,颜色代码"#FF8800"
与"#ff8800"
、"#F80"
与"#f80"
是等效的。
此外,还可以按名称指定一些常见的颜色。下表列出了命名颜色选项、等效 RGB 三元组和十六进制颜色代码。
颜色名称 | 短名称 | RGB 三元组 | 十六进制颜色代码 | 外观 |
---|---|---|---|---|
"red" | "r" | [1 0 0] | "#FF0000" | |
"green" | "g" | [0 1 0] | "#00FF00" | |
"blue" | "b" | [0 0 1] | "#0000FF" | |
"cyan" | "c" | [0 1 1] | "#00FFFF" | |
"magenta" | "m" | [1 0 1] | "#FF00FF" | |
"yellow" | "y" | [1 1 0] | "#FFFF00" | |
"black" | "k" | [0 0 0] | "#000000" | |
"white" | "w" | [1 1 1] | "#FFFFFF" | |
"none" | 不适用 | 不适用 | 不适用 | 无颜色 |
以下是 MATLAB® 在许多类型的绘图中使用的默认颜色的 RGB 三元组和十六进制颜色代码。
RGB 三元组 | 十六进制颜色代码 | 外观 |
---|---|---|
[0 0.4470 0.7410] | "#0072BD" | |
[0.8500 0.3250 0.0980] | "#D95319" | |
[0.9290 0.6940 0.1250] | "#EDB120" | |
[0.4940 0.1840 0.5560] | "#7E2F8E" | |
[0.4660 0.6740 0.1880] | "#77AC30" | |
[0.3010 0.7450 0.9330] | "#4DBEEE" | |
[0.6350 0.0780 0.1840] | "#A2142F" |
LineStyle
— 线型
"-"
(默认) | "--"
| ":"
| "-."
| "none"
线型,指定为下表中列出的选项之一。
线型 | 描述 | 表示的线条 |
---|---|---|
"-" | 实线 |
|
"--" | 虚线 |
|
":" | 点线 |
|
"-." | 点划线 |
|
"none" | 无线条 | 无线条 |
LineWidth
— 线条宽度
0.5
(默认) | 正值
线宽,指定为以磅为单位的正值,其中 1 磅 = 1/72 英寸。如果该线条具有标记,则线条宽度也会影响标记边。
线宽不能小于像素的宽度。如果将线宽设置为小于系统上像素宽度的值,则线条显示为一个像素的宽度。
Marker
— 标记符号
"none"
(默认) | "o"
| "+"
| "*"
| "."
| ...
标记符号,指定为下表中列出的值之一。默认情况下,对象不显示标记。指定标记符号可在每个数据点或顶点添加标记。
标记 | 描述 | 生成的标记 |
---|---|---|
"o" | 圆圈 |
|
"+" | 加号 |
|
"*" | 星号 |
|
"." | 点 |
|
"x" | 叉号 |
|
"_" | 水平线条 |
|
"|" | 垂直线条 |
|
"square" | 方形 |
|
"diamond" | 菱形 |
|
"^" | 上三角 |
|
"v" | 下三角 |
|
">" | 右三角 |
|
"<" | 左三角 |
|
"pentagram" | 五角形 |
|
"hexagram" | 六角形 |
|
"none" | 无标记 | 不适用 |
MarkerSize
— 标记大小
6
(默认) | 正值
标记大小,指定为以磅为单位的正值,其中 1 磅 = 1/72 英寸。
输出参数
fs
— 一个或多个 FunctionSurface
或 ParameterizedFunctionSurface
对象
标量 | 向量
一个或多个 FunctionSurface
或 ParameterizedFunctionSurface
对象,以标量或向量形式返回。
如果使用
fsurf(f)
语法或此语法的变体,fsurf
将返回FunctionSurface
对象。如果使用
fsurf(funx,funy,funz)
语法或此语法的变体,fsurf
将返回ParameterizedFunctionSurface
对象。
您可以使用这些对象来查询和修改特定曲面的属性。有关属性列表,请参阅 FunctionSurface 属性 和 ParameterizedFunctionSurface 属性。
版本历史记录
在 R2016a 中推出
另请参阅
函数
属性
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)