15.2.2三维图

函数mesh生成网格曲面图。例如

tx = ty = linspace (-8, 8, 41)';
[xx, yy] = meshgrid (tx, ty);
r = sqrt (xx .^ 2 + yy .^ 2) + eps;
tz = sin (r) ./ r;
mesh (tx, ty, tz);
xlabel ("tx");
ylabel ("ty");
zlabel ("tz");
title ("3-D Sombrero plot");

返回了中所示的熟悉的“宽边帽”情节图15.5。注意函数的使用meshgrid以创建用于绘制Z数据的X坐标和Y坐标的矩阵。这个ndgrid函数类似于meshgrid,但适用于N维矩阵。

mesh

图15.5:网格图。

这个meshc函数类似于mesh,但也会为曲面生成大量轮廓。

这个plot3函数显示任意三维数据,而不需要它来形成曲面。例如

t = 0:0.1:10*pi;
r = linspace (0, 1, numel (t));
z = linspace (0, 1, numel (t));
plot3 (r.*sin (t), r.*cos (t), z);
xlabel ("r.*sin (t)");
ylabel ("r.*cos (t)");
zlabel ("z");
title ("plot3 display of 3-D helix");

显示三维缓和曲线,如所示图15.6.

plot3

图15.6:三维螺旋。

最后view函数改变三维图的观点。

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

打印三维线框网格。

线框网格是使用矩形绘制的。角的顶点[x,y]通常是的输出meshgrid.在x-y平面中的2-D矩形区域上。z确定每个顶点的平面上方的高度。如果只有一个z给出矩阵,然后将其绘制在网格上x = 1:columns (z), y = 1:rows (z)。因此,的列z对应不同x值和行z对应不同y价值观

网格的颜色是通过线性缩放z值以适应当前颜色map的范围。使用caxis和/或改变颜色map以控制外观。

(可选)网格的颜色可以独立于z通过提供彩色矩阵,c.

任何属性/值对都将直接传递给基础surfaceobject。完整的属性清单记录在Surface Properties.

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

可选返回值h是createdsurface对象的图形句柄。

详见: ezmesh,meshc,meshz,trimesh,contour,surf,surface,meshgrid,hidden,shading,colormap,caxis.

广告
 
:meshc (x,y,z)
:meshc (z)
:meshc (…,c)
:meshc (…,prop,val, …)
:meshc (hax, …)
:h= meshc (…)

打印具有基本轮廓线的三维线框网格。

线框网格是使用矩形绘制的。角的顶点[x,y]通常是的输出meshgrid.在x-y平面中的2-D矩形区域上。z确定每个顶点的平面上方的高度。如果只有一个z给出矩阵,然后将其绘制在网格上x = 1:columns (z), y = 1:rows (z)。因此,的列z对应不同x值和行z对应不同y价值观

网格的颜色是通过线性缩放z值以适应当前颜色map的范围。使用caxis和/或改变颜色map以控制外观。

(可选)网格的颜色可以独立于z通过提供彩色矩阵,c.

任何属性/值对都将直接传递给基础surfaceobject。完整的属性清单记录在Surface Properties.

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

可选返回值h是一个带有图形句柄的2元素向量,用于创建的曲面对象和创建的等高线图。

详见: ezmeshc,mesh,meshz,contour,surfc,surface,meshgrid,hidden,shading,colormap,caxis.

广告
 
:meshz (x,y,z)
:meshz (z)
:meshz (…,c)
:meshz (…,prop,val, …)
:meshz (hax, …)
:h= meshz (…)

使用周围的幕墙打印三维线框网格。

线框网格是使用矩形绘制的。角的顶点[x,y]通常是的输出meshgrid.在x-y平面中的2-D矩形区域上。z确定每个顶点的平面上方的高度。如果只有一个z给出矩阵,然后将其绘制在网格上x = 1:columns (z), y = 1:rows (z)。因此,的列z对应不同x值和行z对应不同y价值观

网格的颜色是通过线性缩放z值以适应当前颜色map的范围。使用caxis和/或改变颜色map以控制外观。

(可选)网格的颜色可以独立于z通过提供彩色矩阵,c.

任何属性/值对都将直接传递给基础surfaceobject。完整的属性清单记录在Surface Properties.

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

可选返回值h是createdsurface对象的图形句柄。

详见: mesh,meshc,contour,surf,surface,waterfall,meshgrid,hidden,shading,colormap,caxis.

广告
 
:hidden
:hidden on
:hidden off
:mode= hidden (…)

控制网格隐藏线的删除。

当在没有参数的情况下调用时,隐藏线删除状态会切换。

使用其中一种模式调用时"on""off"相应地设置状态。

可选输出参数mode是当前状态。

“隐藏线删除”确定网格绘图后面哪些图形对象可见。默认情况下,网格是不透明的,并且网格后面的线不可见。如果禁用了隐藏线移除,则可以通过网格的面(开口)看到网格后面的对象,尽管网格网格线仍然是不透明的。

详见: mesh,meshc,meshz,ezmesh,ezmeshc,trimesh,waterfall.

广告
 
:surf (x,y,z)
:surf (z)
:surf (…,c)
:surf (…,prop,val, …)
:surf (hax, …)
:h= surf (…)

打印三维曲面网格。

曲面网格是使用着色矩形绘制的。角的顶点[x,y]通常是的输出meshgrid.在x-y平面中的2-D矩形区域上。z确定每个顶点的平面上方的高度。如果只有一个z给出矩阵,然后将其绘制在网格上x = 1:columns (z), y = 1:rows (z)。因此,的列z对应不同x值和行z对应不同y价值观

曲面的颜色是通过线性缩放z值以适应当前颜色map的范围。使用caxis和/或改变颜色map以控制外观。

(可选)可以独立于z通过提供彩色矩阵,c.

任何属性/值对都将直接传递给基础surfaceobject。完整的属性清单记录在Surface Properties.

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

可选返回值h是createdsurface对象的图形句柄。

注意:可以使用控制曲面的确切外观shading命令或使用set以控制曲面对象属性。

详见: ezsurf,surfc,surfl,surfnorm,trisurf,contour,mesh,surface,meshgrid,hidden,shading,colormap,caxis.

广告
 
:surfc (x,y,z)
:surfc (z)
:surfc (…,c)
:surfc (…,prop,val, …)
:surfc (hax, …)
:h= surfc (…)

使用基础等高线绘制三维曲面网格。

曲面网格是使用着色矩形绘制的。角的顶点[x,y]通常是的输出meshgrid.在x-y平面中的2-D矩形区域上。z确定每个顶点的平面上方的高度。如果只有一个z给出矩阵,然后将其绘制在网格上x = 1:columns (z), y = 1:rows (z)。因此,的列z对应不同x值和行z对应不同y价值观

曲面的颜色是通过线性缩放z值以适应当前颜色map的范围。使用caxis和/或改变颜色map以控制外观。

(可选)可以独立于z通过提供彩色矩阵,c.

任何属性/值对都将直接传递给基础surfaceobject。完整的属性清单记录在Surface Properties.

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

可选返回值h是createdsurface对象的图形句柄。

注意:可以使用控制曲面的确切外观shading命令或使用set以控制曲面对象属性。

详见: ezsurfc,surf,surfl,surfnorm,trisurf,contour,mesh,surface,meshgrid,hidden,shading,colormap,caxis.

广告
 
:surfl (z)
:surfl (x,y,z)
:surfl (…,lsrc)
:surfl (x,y,z,lsrc,P)
:surfl (…, "cdata")
:surfl (…, "light")
:surfl (hax, …)
:h= surfl (…)

使用基于各种照明模型的着色打印三维曲面。

曲面网格是使用着色矩形绘制的。角的顶点[x,y]通常是的输出meshgrid.在x-y平面中的2-D矩形区域上。z确定每个顶点的平面上方的高度。如果只有一个z给出矩阵,然后将其绘制在网格上x = 1:columns (z), y = 1:rows (z)。因此,的列z对应不同x值和行z对应不同y价值观

默认照明模式"cdata",更改曲面对象的cdata属性,以给人一种亮曲面的印象。

备用模式"light"创建一个灯光对象来照亮曲面。

可以使用指定光源位置lsrc其可以是以度为单位的2元素向量[方位角,仰角],或者3元素向量[lx,ly,lz]。默认值是相对于当前视图逆时针旋转45度。

可以使用4-elementvector指定曲面的材质属性P= [AM D SP exp]默认为p= [0.55 0.6 0.4 10].

"AM" strength of ambient light
"D" strength of diffuse reflection
"SP" strength of specular reflection
"EXP" specular exponent

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

可选返回值h是createdsurface对象的图形句柄。

用例

colormap (bone (64));
surfl (peaks);
shading interp;

详见: diffuse,specular,surf,shading,colormap,caxis.

广告
 
:surfnorm (x,y,z)
:surfnorm (z)
:surfnorm (…,prop,val, …)
:surfnorm (hax, …)
:[Nx,Ny,Nz] = surfnorm (…)

找到垂直于网格曲面的向量。

如果xy是向量,则典型的顶点是(xjy(i) ,z(i,j))。因此,的列z对应不同x的值和行z对应不同y价值观如果只有单个输入z则给出x是的1:columns (z)y1:rows (z).

如果不要求返回参数,则会绘制曲面图,其中包含曲面的法线向量。

任何属性/值输入对都将指定给曲面对象。完整的属性列表记录在Surface Properties.

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

如果指定了输出参数,则在中返回法线向量的分量Nx,NyNz没有阴谋。法向量未归一化(幅值!=1)。若要规范化,请使用

len = sqrt (nx.^2 + ny.^2 + nz.^2);
nx ./= len;  ny ./= len;  nz ./= len;

的使用示例surfnorm

surfnorm (peaks (25));

算法:法向量是通过取网格中每个四边形面的对角线的叉积来计算的,以找到每个面的中心的法向量。接下来,对于每个网格点,对四个最近的法线向量进行平均,以获得网格点处的表面的最终法线。

对于曲面对象"VertexNormals"属性包含连续的信息,除了可能在曲面边界附近,不同的插值方案可能会返回略有不同的值。

详见: isonormals,quiver3,surf,meshgrid.

广告
 
:fv= isosurface (v,isoval)
:fv= isosurface (v)
:fv= isosurface (x,y,z,v,isoval)
:fv= isosurface (x,y,z,v)
:fvc= isosurface (…,col)
:fv= isosurface (…, "noshare")
:fv= isosurface (…, "verbose")
:[f,v] = isosurface (…)
:[f,v,c] = isosurface (…)
:isosurface (…)

计算三维体积数据的等值面。

等值面连接具有相同值的点,类似于等值线图,但在三维中。

输入参数v是一个三维数组,包含在体积上采样的数据。

输入isoval是一个标量,用于指定sosurface的值。如果isoval省略或为空,等值面的“好”值从v.

使用单个输出参数调用时isosurface返回aststructure数组fv包含字段facesvertices在点处计算[x, y, z] = meshgrid (1:l, 1:m, 1:n)这里的[l, m, n] = size (v).输出fv可以直接用作的输入patch作用

如果使用其他输入参数调用x,yz是大小与相同的三维数组v或长度对应于的维度的向量v,然后在指定的点获取体积数据。如果x,yz为空,网格对应于索引(1:n)在各自的方向上(详见meshgrid).

可选输入参数col,是一个三维数组,大小与v,指定等值面的着色。根据需要对颜色数据进行插值以匹配isoval.在这种情况下,输出结构体数组具有附加字段facevertexcdata.

如果给定字符串输入参数"noshare",对于不同的面,顶点可以多次重新转换。默认行为是限制相邻面共享的顶点。

字符串输入参数"verbose"支持MATLAB兼容性,但没有效果。

任何字符串参数都必须在其他参数之后传递。

如果使用两个或三个输出参数调用,则返回有关面的信息f,顶点v,和颜色数据c作为分离射线而不是单个结构体数组。

如果在没有输出参数的情况下调用,则使用patch命令和灯光对象添加到轴(如果还不存在)。

例如

[x, y, z] = meshgrid (1:5, 1:5, 1:5);
v = rand (5, 5, 5);
isosurface (x, y, z, v, .5);

将直接在图形窗口中绘制随机等值面几何图形。

具有不同附加着色的等值面几何体的示例:

N = 15;    # Increase number of vertices in each direction
iso = .4;  # Change isovalue to .1 to display a sphere
lin = linspace (0, 2, N);
[x, y, z] = meshgrid (lin, lin, lin);
v = abs ((x-.5).^2 + (y-.5).^2 + (z-.5).^2);
figure ();

subplot (2,2,1); view (-38, 20);
[f, vert] = isosurface (x, y, z, v, iso);
p = patch ("Faces", f, "Vertices", vert, "EdgeColor", "none");
pbaspect ([1 1 1]);
isonormals (x, y, z, v, p)
set (p, "FaceColor", "green", "FaceLighting", "gouraud");
light ("Position", [1 1 5]);

subplot (2,2,2); view (-38, 20);
p = patch ("Faces", f, "Vertices", vert, "EdgeColor", "blue");
pbaspect ([1 1 1]);
isonormals (x, y, z, v, p)
set (p, "FaceColor", "none", "EdgeLighting", "gouraud");
light ("Position", [1 1 5]);

subplot (2,2,3); view (-38, 20);
[f, vert, c] = isosurface (x, y, z, v, iso, y);
p = patch ("Faces", f, "Vertices", vert, "FaceVertexCData", c, ...
           "FaceColor", "interp", "EdgeColor", "none");
pbaspect ([1 1 1]);
isonormals (x, y, z, v, p)
set (p, "FaceLighting", "gouraud");
light ("Position", [1 1 5]);

subplot (2,2,4); view (-38, 20);
p = patch ("Faces", f, "Vertices", vert, "FaceVertexCData", c, ...
           "FaceColor", "interp", "EdgeColor", "blue");
pbaspect ([1 1 1]);
isonormals (x, y, z, v, p)
set (p, "FaceLighting", "gouraud");
light ("Position", [1 1 5]);

详见: isonormals,isocolors,isocaps,smooth3,reducevolume,reducepatch,patch.

广告
 
:vn= isonormals (val,vert)
:vn= isonormals (val,hp)
:vn= isonormals (x,y,z,val,vert)
:vn= isonormals (x,y,z,val,hp)
:vn= isonormals (…, "negate")
:isonormals (val,hp)
:isonormals (x,y,z,val,hp)
:isonormals (…, "negate")

计算等值面的法线。

顶点法线vn根据三维数组的梯度计算val(大小:lxmxn),包含各向异性曲面几何体的数据。法线指向中的较小值val.

如果使用一个输出参数调用vn,和第二个输入自变量vert保持等值面的顶点,然后法线vn在顶点处计算vert在给定的网格上[x, y, z] = meshgrid (1:l, 1:m, 1:n).输出参数vn大小与相同vert并且可以用于设置"VertexNormals"相应补丁的属性。

如果使用其他输入参数调用x,yz,是与相同大小的三维数组val,则在这些点处获取体积数据。而不是顶点数据vert,一个补丁句柄hp可以传递给函数。

如果最后一个输入参数是字符串"negate",计算等值面几何体的反向向量法线(即,中的指向更大值val).

如果没有给出输出参数,则属性"VertexNormals"与补丁句柄关联的补丁的hp直接更改。

详见: isosurface,isocolors,smooth3.

广告
 
:fvc= isocaps (v,isoval)
:fvc= isocaps (v)
:fvc= isocaps (x,y,z,v,isoval)
:fvc= isocaps (x,y,z,v)
:fvc= isocaps (…,which_caps)
:fvc= isocaps (…,which_plane)
:fvc= isocaps (…,"verbose")
:[faces,vertices,fvcdata] = isocaps (…)
:isocaps (…)

为三维数据的等值面创建端盖。

此函数用于在等曲面的开放端放置封口。

输入参数v是一个三维数组,包含在体积上采样的数据。

输入isoval是一个标量,用于指定sosurface的值。如果isoval省略或为空,等值面的“好”值从v.

当使用单个输出参数调用时,isocaps返回aststructure数组fvc具有字段:faces,verticesfacevertexcdata。结果在点处计算[x, y, z] = meshgrid (1:l, 1:m, 1:n)这里的[l, m, n] = size (v).输出fvc可以直接用作的输入patch作用

如果使用其他输入参数调用x,yz是大小与相同的三维数组v或长度对应于的维度的向量v,然后在指定的点获取体积数据。如果x,yz为空,网格对应于索引(1:n)在各自的方向上(详见meshgrid).

可选参数which_caps可以具有以下字符串值之一,该值定义了数据的包方式:

"above", "a" (default)

用于包含上述数据的端盖isoval.

广告
"below", "b"

用于包含以下数据的端盖isoval.

广告

可选参数which_plane可以具有以下字符串值之一,以定义应绘制的端盖:

"all" (default)

用于所有端盖。

广告
"xmin"

用于数据的较低x平面处的端盖。

广告
"xmax"

用于数据的上部x平面处的端盖。

广告
"ymin"

用于数据的较低y平面处的端盖。

广告
"ymax"

用于数据的上y平面处的端盖。

广告
"zmin"

用于数据的较低z平面处的端盖。

广告
"zmax"

用于数据的上z平面处的端盖。

广告

字符串输入参数"verbose"支持MATLAB兼容性,但没有效果。

如果使用两个或三个输出参数调用,则面的数据faces,顶点vertices,以及颜色数据facevertexcdata以单独的数组而不是单个结构体返回。

如果在没有输出参数的情况下调用,则使用patch命令

详见: isosurface,isonormals,patch.

广告
 
:cdat= isocolors (c,v)
:cdat= isocolors (x,y,z,c,v)
:cdat= isocolors (x,y,z,r,g,b,v)
:cdat= isocolors (r,g,b,v)
:cdat= isocolors (…,hp)
:isocolors (…,hp)

计算等值面颜色。

如果使用一个输出参数和第一个输入参数调用c是一个三维数组,包含索引的颜色值和第二个输入参数v是等值面几何体的顶点,然后返回矩阵cdat具有计算点处几何图形的颜色数据信息[x, y, z] = meshgrid (1:l, 1:m, 1:n).输出胶cdat可以用于手动设置"FaceVertexCData"等值面补丁对象的属性。

如果使用其他输入参数调用x,yz它们是与c则在这些指定点处获取颜色数据。

而不是索引颜色数据c,isocolors也可以用RGB值调用r,g,b.如果输入参数x,y,z则没有给出meshgrid使用计算值。

(可选)补丁句柄hp可以作为所有函数调用变体的最后一个输入参数,并且顶点数据将从等值面补丁对象中提取。最后,如果没有给出输出参数,那么补丁句柄给出的补丁颜色hp都发生了变化。

详见: isosurface,isonormals.

广告
 
:smoothed_data= smooth3 (data)
:smoothed_data= smooth3 (data,method)
:smoothed_data= smooth3 (data,method,sz)
:smoothed_data= smooth3 (data,method,sz,std_dev)

三维矩阵的平滑值data.

例如,此函数可用于减少中噪声的影响data在计算等值面之前。

data必须是非奇异三维矩阵。输出smoothed_data是与大小相同的矩阵data.

参数输入method确定哪个卷积核用于平滑处理。可能的选择:

"box", "b" (default)

具有尖锐边缘的卷积核。

广告
"gaussian", "g"

从非相关三元分布函数表示的卷积核。

广告

sz是指定卷积核在x、y和z方上级大小的三元向量,或者是标量。在标量情况下,所有三个维度都使用相同的尺寸([sz, sz, sz]). 默认值为3。

如果method"gaussian"然后是可选输入std_dev定义了三元正态分布函数的标准差。std_dev是指定高斯卷积核在x、y和z方上级标准偏差的三元向量,或者是标量。在标量情况下,所有三维都使用相同的值。默认值为0.65。

详见: isosurface,isonormals,patch.

广告
 
:[nx,ny,nz,nv] = reducevolume (v,r)
:[nx,ny,nz,nv] = reducevolume (x,y,z,v,r)
:nv= reducevolume (…)

减少中的数据集体积v根据中的值r.

v是在前3个维度中非奇异的矩阵。

r可以是表示x、y和z方上级归约因子的3个元素的向量,也可以是标量,在这种情况下,在所有三维中使用相同的归约系数。

reducevolume减少的元素数量v只拿走每一个r-第th个元素。

可选地,x,yz可以提供来表示的坐标集v。它们可以是大小相同的矩阵v或具有根据的尺寸的大小的向量v,在这种情况下,它们被扩展为矩阵(详见meshgrid).

如果reducevolume则使用两个参数调用x,yz假设与的相应索引匹配v.

在中返回缩减矩阵nv.

(可选)在中返回缩减后的坐标集nx,nynz分别地

示例:

v = reshape (1:6*8*4, [6 8 4]);
nv = reducevolume (v, [4 3 2]);
v = reshape (1:6*8*4, [6 8 4]);
x = 1:3:24;  y = -14:5:11;  z = linspace (16, 18, 4);
[nx, ny, nz, nv] = reducevolume (x, y, z, v, [4 3 2]);

详见: isosurface,isonormals.

广告
 
:reduced_fv= reducepatch (fv)
:reduced_fv= reducepatch (faces,vertices)
:reduced_fv= reducepatch (patch_handle)
:reducepatch (patch_handle)
:reduced_fv= reducepatch (…,reduction_factor)
:reduced_fv= reducepatch (…, "fast")
:reduced_fv= reducepatch (…, "verbose")
:[reduced_faces,reduces_vertices] = reducepatch (…)

减少补丁对象中的面和顶点数量,同时保留补丁的整体形状。

输入补丁可以从一个结构体表示fv与字段facesvertices,乘以两个矩阵facesvertices(例如,详见的结果isosurface),或通过约束到补丁对象patch_handle详见patch).

通过将补丁的最短边迭代到其中点来减少补丁中的面和顶点的数量(如所讨论的,例如,此处:https://libigl.github.io/libigl/tutorial/tutorial.html#meshdecimation).

目前,仅支持从三角形组成的补丁。搜索补丁也仅从三角形组成。

如果reducepatch使用有效补丁的句柄调用patch_handle,并且没有任何输出参数,则givenpatch将立即更新。

如果reduction_factor省略,得到的结构体reduced_fv包括原始批次的大约50%的面。如果reduction_factor是介于0(排除)和1(排除)之间的分数,该贴片具有大约确定的facesis的相应分数。如果reduction_factor是一个大于或等于1的整数,则生成的补丁具有近似值reduction_factor面孔。根据补丁的几何图形,生成的面数可能与给定的值不同reduction_factor。当检测到许多共享顶点时尤其如此。

为了减少,有必要共享接触面的顶点。共享顶点会自动检测到。通过传递可选的字符串参数可以跳过此检测"fast".

带有可选的字符串参数"verbose",其他状态信息将打印到命令窗口中。

任何字符串输入参数都必须在所有其他参数之后传递。

如果使用一个输出参数调用,则在结构体中返回缩减的面和顶点reduced_fv与字段facesvertices(详见的一个输出参数isosurface).

如果使用两个输出参数调用,则缩减的面和顶点将在两个单独的矩阵中返回reduced_facesreduced_vertices.

详见: isosurface,isonormals,reducevolume,patch.

广告
 
:shrinkfaces (p,sf)
:nfv= shrinkfaces (p,sf)
:nfv= shrinkfaces (fv,sf)
:nfv= shrinkfaces (f,v,sf)
:[nf,nv] = shrinkfaces (…)

通过收缩因子减小补丁中面的大小sf.

补丁对象可以从图形句柄指定(p),一个补丁结构体(fv)与字段"faces""vertices",或作为两个单独的矩阵(f,v)面的和顶点。

收缩系数sf是一个正数,指定新面将占据的原始区域的百分比。如果没有给出系数,则默认值为0.3(减少到原始尺寸的30%)。大于1.0的因子将导致面的扩展。

给定一个补丁句柄作为第一个输入参数,而没有输出参数,则在适当的位置执行补丁面的收缩并重新绘制补丁。

如果使用一个输出参数调用,则返回一个包含字段的结构体"faces","vertices""facevertexcdata"包含收缩后的数据。此结构体可以直接用作的输入参数patch作用

小心:在凹凸面上执行收缩操作可能会导致不理想的结果。

示例:一个三角形的3/4圆和相应的缩小版本。

[phi r] = meshgrid (linspace (0, 1.5*pi, 16), linspace (1, 2, 4));
tri = delaunay (phi(:), r(:));
v = [r(:).*sin(phi(:)) r(:).*cos(phi(:))];
clf ()
p = patch ("Faces", tri, "Vertices", v, "FaceColor", "none");
fv = shrinkfaces (p);
patch (fv)
axis equal
grid on

详见: patch.

广告
 
:d= diffuse (sx,sy,sz,lv)

计算法线向量元素定义的曲面的漫反射强度sx,sy,sz.

光源位置向量lv可以给出为以度为单位的2元素向量[方位角,仰角],或者给出为3元素向量[x,y,z]。

详见: specular,surfl.

广告
 
:refl= specular (sx,sy,sz,lv,vv)
:refl= specular (sx,sy,sz,lv,vv,se)

计算从法线向量元素定义的表面的镜面反射强度sx,sy,sz使用Phong的近似。

光源位置和查看器位置向量是使用参数指定的lvvv分别地位置向量可以给出为以度为单位的2-元素向量[方位角,仰角]或3-元素向量[x,y,z]。

可选的第六个参数指定镜面反射指数(扩散)se如果没有给出,se默认为10。

详见: diffuse,surfl.

广告
 
:lighting (type)
:lighting (hax,type)

设置补丁或曲面图形对象的照明。

的有效参数type

"flat"

绘制具有分面照明效果的对象。

广告
"gouraud"

在顶点之间绘制具有线性插值照明效果的对象。

广告
"none"

绘制没有灯光和阴影效果的对象。

广告

如果第一个参数hax是一个轴控制柄,然后更改此轴中对象的光照效果,而不是从返回的当前轴gca.

只有在同一轴上至少存在一个可见光对象时,照明效果才可见。

详见: light,fill,mesh,patch,pcolor,surf,surface,shading.

广告
 
:material shiny
:material dull
:material metal
:material default
:material ([as,ds,ss])
:material ([as,ds,ss,se])
:material ([as,ds,ss,se,scr])
:material (hlist, …)
:mtypes= material ()
:refl_props= material (mtype_string)

为曲面和补丁的照明设置反射率属性。

此函数可更改所有的环境光、漫反射和镜面反射强度,以及镜面反射指数和镜面反射颜色反射率patchsurface当前轴中的对象。在一定程度上,这可以用于模拟某些材料在与light.

当使用字符串调用时,将根据下表中的值设置上述属性:

mtype 环境强度 扩散强度 镜面反射强度 镜面反射-指数 镜面颜色-反射率
"shiny" 0.3 0.6 0.9 20 1.0
"dull" 0.3 0.8 0.0 10 1.0
"metal" 0.3 0.3 1.0 25 0.5
"default" "default" "default" "default" "default" "default"

当用三个元素的向量调用时,所有元素的环境强度、漫射强度和特殊强度patchsurface更新当前轴中的对象。可选的第四个向量元素更新镜面指数,可选的第五个向量元素则更新镜面颜色反射率。

图形句柄列表也可以作为第一个参数传递。在这种情况下,这些句柄和所有子对象的属性patchsurface对象将被更新。

此外,material可以用单个输出参数调用。如果在没有输入参数的情况下调用,则列数组向量mtypes返回所有可用材料的字符串。如果一个inputargumentmtype_string是材料的名称,1x5元胞载体refl_props并研究了该材料的反射属性。在这两种情况下,都不会更改图形属性。

详见: light,fill,mesh,patch,pcolor,surf,surface.

广告
 
:camlight
:camlight right
:camlight left
:camlight headlight
:camlight (az,el)
:camlight (…,style)
:camlight (hl, …)
:camlight (hax, …)
:h= camlight (…)

使用简单的界面将灯光对象添加到图形中。

当在没有参数的情况下调用时,会将灯光对象添加到当前绘图中,并将其放置在相机当前位置的略上方和右侧:这相当于camlight right.命令camlight leftcamlight headlight与放置在相机位置左侧或相机位置中心的位置类似。

为了进行更多控制,可以通过方位角旋转来指定灯光位置az和仰角el,均以度为单位,相对于相机的当前属性。

可选字符串style指定灯光是否为局部点源("local",默认值)或放置在无限远的位置("infinite").

如果第一个参数hl是灯光对象的句柄,然后对该灯光对象执行操作,而不是创建新对象。

如果第一个参数hax是一个轴控制柄,然后在此轴中创建一个新的灯光对象,而不是从返回的当前轴gca.

可选返回值h是灯光对象的图形句柄。这可用于移动或进一步更改灯光对象的属性。

示例:

将灯光对象添加到绘图

sphere (36);
camlight

准确定位光源

camlight (45, 30);

此处灯光首先向上倾斜(详见camup)从相机位置(详见campos)30度。然后它向右偏转45度。两个旋转都以相机目标为中心(详见camtarget).

返回控制柄以进一步操作灯光对象

clf
sphere (36);
hl = camlight ("left");
set (hl, "color", "r");

详见: light.

广告
 
:lightangle (az,el)
:lightangle (hax,az,el)
:lightangle (hl,az,el)
:hl= lightangle (…)
:[az,el] = lightangle (hl)

使用球面坐标将灯光对象添加到当前轴。

灯光位置从方位角旋转指定az和内倾角el,均以度为单位。

如果第一个参数hax是一个轴控制柄,然后在此轴中创建一个新的灯光对象,而不是从返回的当前轴gca.

如果第一个参数hl是灯光对象的句柄,然后对该灯光对象执行操作,而不是创建新对象。

可选返回值hl是灯光对象的图形句柄。

用例

将灯光对象添加到绘图

clf;
sphere (36);
lightangle (45, 30);

详见: light,view,camlight.

广告
 
:[xx,yy] = meshgrid (x,y)
:[xx,yy,zz] = meshgrid (x,y,z)
:[xx,yy] = meshgrid (x)
:[xx,yy,zz] = meshgrid (x)

给定的向量xy坐标,返回矩阵xxyy对应于完整的2-D网格。

的行xx是的副本x的列yy是的副本y如果y如果省略,则假定其与x.

如果可选z输入已给出,或zz则输出将是一个完整的三维网格。如果z省略,并且zz如果有要求,则假定与y.

meshgrid最常用于返回将被绘制的2-D或3-D函数的输入。以下示例创建了一个“宽边帽”函数的曲面图。

f = @(x,y) sin (sqrt (x.^2 + y.^2)) ./ sqrt (x.^2 + y.^2);
range = linspace (-8, 8, 41);
[X, Y] = meshgrid (range, range);
Z = f (X, Y);
surf (X, Y, Z);

编程说明:meshgrid仅限于二维或三维网格生成。这个ndgrid函数将生成1-D到N-D网格。然而,这些函数并不完全等同。如果x是长度为M的向量,并且y是长度为N的向量,则meshgrid将返回NxM的输出网格。ndgrid将为相同的输入返回MxN(转置)的输出。一些核心函数预期meshgrid输入和其他人期望ndgrid输入检查有关函数的文档,以确定正确的输入格式。

详见: ndgrid,mesh,contour,surf.

广告
 
:[y1,y2, …,yn ndgrid (x1,x2, …,xn
:[y1,y2, …,yn ndgrid (x)

给定n个向量x1, …,xnndgrid返回维度n的narray。

第i个返回变量的元素包含向量的元素x我在所有不同于第i维度的维度上重复了一遍。只使用一个输入参数调用ndgridx相当于在所有n个输入参数都等于的情况下调用ndgridx:

[y1,y2, …,yn] =ndgrid(x, …,x)

编程说明:ndgrid与函数非常相似meshgrid除了前两个维度被转换为meshgrid。一些核心函数预期meshgrid输入和其他人期望ndgrid输入检查有关函数的文档,以确定正确的输入格式。

详见: meshgrid.

广告
 
:plot3 (x,y,z)
:plot3 (x,y,z,prop,value, …)
:plot3 (x,y,z,fmt)
:plot3 (x,cplx)
:plot3 (cplx)
:plot3 (hax, …)
:h= plot3 (…)

制作三维绘图。

许多不同的参数组合是可能的。最简单的形式是

plot3 (x, y, z)

其中自变量被认为是要在三维中绘制的点的顶点。若所有自变量都是相同长度的向量,则绘制一条连续的直线。如果所有的参数都是矩阵,那么的每一列都被视为一行。没有试图转换参数以使行数匹配。

如果只给出两个自变量,作为

plot3 (x, cplx)

第二个自变量的实部和虚部用作yz坐标。

如果只给出一个自变量,作为

plot3 (cplx)

参数的实部和虚部用作yz值,并将它们与索引进行比较。

参数也可以三人一组给出,如下所示

plot3 (x1, y1, z1, x2, y2, z2, ...)

其中每一组三个自变量被视为一条单独的线或三维的一组线。

要绘制多个一个或两个参数组,请使用空格式字符串分隔每个组,如下所示

plot3 (x1, c1, "", c2, "", ...)

可以指定多个属性值对,这将影响绘制的线对象plot3。如果fmt提供了参数,它将以与相同的方式格式化行对象plot。完整的属性清单记录在Line Properties.

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

可选返回值h是已创建打印的图形句柄。

用例

z = [0:0.05:5];
plot3 (cos (2*pi*z), sin (2*pi*z), z, ";helix;");
plot3 (z, exp (2i*pi*z), ";complex sinusoid;");

详见: ezplot3,plot.

广告
 
:view (azimuth,elevation)
:view ([azimuth elevation])
:view ([x y z])
:view (2)
:view (3)
:view (hax, …)
:[azimuth,elevation] = view ()

查询或设置当前轴的视点。

参数azimuthelevation可以作为两个自变量或作为2-元素向量给出。也可以使用笛卡尔坐标指定视点x,yz.

电话view (2)将视点设置为azimuth= 0 以及elevation= 90 ,这是二维图的默认值。

电话view (3)将视点设置为azimuth= -37.5 以及elevation= 30 ,这是三维图形的默认设置。

如果第一个参数hax是一个轴句柄,然后在该轴上操作,而不是在返回的当前轴上操作gca.

如果没有输入,返回这里的azimuthelevation.

广告
 
:camlookat ()
:camlookat (h)
:camlookat (handle_list)
:camlookat (hax)

移动相机并调整其属性以查看对象。

当输入为句柄时h,相机设置为指向的边界框的中心h。调整相机的位置,使边界框大致填满视野。

此命令固定相机的查看方向(camtarget() - campos()),相机向上向量(详见camup)和视角(详见camva). 摄像头目标(详见camtarget)和摄像头位置(详见campos)都发生了变化。

如果参数是列表handle_list,然后计算所有对象的单个边界框,然后如上所述调整相机。

如果参数是轴对象hax,则轴的子对象用作handle_list。当在没有输入的情况下调用时,它使用当前轴(详见gca).

详见: camorbit,camzoom,camroll.

广告
 
:p= campos ()
:campos ([x y z])
:mode= campos ("mode")
:campos (mode)
:campos (hax, …)

获取或设置相机位置。

默认相机位置是根据场景自动确定的。例如,要获取相机位置:

hf = figure();
peaks()
p = campos ()
  ⇒ p =
      -27.394  -35.701   64.079

然后,我们可以将相机沿z轴进一步向上移动:

campos (p + [0 0 10])
campos ()
  ⇒ ans =
      -27.394  -35.701   74.079

做出了改变后,摄像机的位置mode现在是手动的:

campos ("mode")
  ⇒ manual

我们可以将其设置回自动:

campos ("auto")
campos ()
  ⇒ ans =
      -27.394  -35.701   64.079
close (hf)

默认情况下,这些命令会影响当前轴;或者,轴扫描从可选参数指定hax.

详见: camup,camtarget,camva.

广告
 
:camorbit (theta,phi)
:camorbit (theta,phi,coorsys)
:camorbit (theta,phi,coorsys,dir)
:camorbit (theta,phi数据
:camorbit (theta,phi,“数据”,“z”)
:camorbit (theta,phi,“数据”,“x”)
:camorbit (theta,phi,“数据”,“y”)
:camorbit (theta,phi数据x y z])
:camorbit (theta,phi照相机
:camorbit (hax, …)

围绕目标向上/向下和向左/向右旋转相机。

移动相机phi度向上和theta向右倾斜度,就好像它在围绕目标的轨道上一样。实例

sphere ()
camorbit (30, 20)

这些旋转以相机目标为中心(详见camtarget).首先,通过旋转相机来向上或向下倾斜相机位置phi围绕与两个观看方向正交的轴的角度(具体地camtarget() - campos())和相机的“上向量”(详见camup).实例

camorbit (0, 20)

第二次旋转取决于坐标系coorsys和方向dir输入。的默认值coorsys"data"在这种情况下,通过旋转相机,相机向左或向右偏转theta围绕轴的度数从dir。的默认值dir"z",对应于向量[0, 0, 1]实例

camorbit (30, 0)

coorsys设置为"camera",通过绕平行于相机上方向向量的轴旋转相机,可以左右移动相机(详见camup).输入dir在这种情况下不应指定。实例

camorbit (30, 0, "camera")

(注:旋转依据phi不受影响"camera".)

这个camorbit命令修改两个相机属性:camposcamup.

默认情况下,此命令会影响当前轴;或者,轴扫描从可选参数指定hax.

详见: camzoom,camroll,camlookat.

广告
 
:camroll (theta)
:camroll (hax,theta)

转动相机。

将相机顺时针滚动theta度。例如,以下命令将相机顺时针(向右)滚动30度;这将导致场景看起来向左滚动30度:

peaks ()
camroll (30)

将相机向后滚动:

camroll (-30)

以下命令将恢复默认的相机滚转:

camup ("auto")

默认情况下,这些命令会影响当前轴;或者,轴扫描从可选参数指定hax.

详见: camzoom,camorbit,camlookat,camup.

广告
 
:t= camtarget ()
:camtarget ([x y z])
:mode= camtarget ("mode")
:camtarget (mode)
:camtarget (hax, …)

获取或设置相机指向的位置。

相机目标是相机指向的空间中的一个点。通常,它是根据场景自动确定的:

hf = figure();
sphere (36)
v = camtarget ()
  ⇒ v =
      0   0   0

我们可以将相机转向新目标:

camtarget ([1 1 1])
camtarget ()
  ⇒   1   1   1

这样做后,摄像机的目标mode是手动的:

camtarget ("mode")
  ⇒ manual

这意味着,例如,向场景中添加新对象不会重定向相机:

hold on;
peaks ()
camtarget ()
  ⇒   1   1   1

我们可以将其重置为自动:

camtarget ("auto")
camtarget ()
  ⇒   0   0   0.76426
close (hf)

默认情况下,这些命令会影响当前轴;或者,轴扫描从可选参数指定hax.

详见: campos,camup,camva.

广告
 
:up= camup ()
:camup ([x y z])
:mode= camup ("mode")
:camup (mode)
:camup (hax, …)

获取或设置相机上方向向量。

默认情况下,相机的方向是“向上”对应于正z轴:

hf = figure ();
sphere (36)
v = camup ()
  ⇒ v =
      0   0   1

指定新的“向上向量”会滚动相机并将模式设置为手动:

camup ([1 1 0])
camup ()
  ⇒   1   1   0
camup ("mode")
  ⇒ manual

修改向上向量不会修改相机目标(详见camtarget). 因此,相机上方向向量可能与相机视图的方向不正交:

camup ([1 2 3])
dot (camup (), camtarget () - campos ())
  ⇒ 6...

其结果是,对上向量的“回拉”不会使相机视图倾斜(因为这需要更改目标)。因此,设置上向量通常仅用于滚动相机。一个更直观的命令是camroll.

最后,我们可以将向上向量重置为自动模式:

camup ("auto")
camup ()
  ⇒   0   0   1
close (hf)

默认情况下,这些命令会影响当前轴;或者,轴扫描从可选参数指定hax.

详见: campos,camtarget,camva.

广告
 
:a= camva ()
:camva (a)
:mode= camva ("mode")
:camva (mode)
:camva (hax, …)

获取或设置相机视角。

相机的视角决定了可以看到多少。默认情况下,这是:

hf = figure();
sphere (36)
a = camva ()
  ⇒ a =  10.340

为了获得更宽的视角,我们可以将视角增加一倍。这也会将模式设置为手动:

camva (2*a)
camva ("mode")
  ⇒ manual

我们可以将其设置回自动:

camva ("auto")
camva ("mode")
  ⇒ auto
camva ()
  ⇒ ans =  10.340
close (hf)

默认情况下,这些命令会影响当前轴;或者,轴扫描从可选参数指定hax.

详见: campos,camtarget,camup.

广告
 
:camzoom (zf)
:camzoom (hax,zf)

放大或缩小相机。

的值zf大于1“放大”,使场景看起来放大:

hf = figure ();
sphere (36)
camzoom (1.2)

小于1的值会“缩小”,以便相机可以看到更多场景:

camzoom (0.5)

从技术上讲,缩放会影响“视角”。以下命令将重置为默认缩放:

camva ("auto")
close (hf)

默认情况下,这些命令会影响当前轴;或者,轴扫描从可选参数指定hax.

详见: camroll,camorbit,camlookat,camva.

广告
 
:slice (x,y,z,v,sx,sy,sz)
:slice (x,y,z,v,xi,yi,zi)
:slice (v,sx,sy,sz)
:slice (v,xi,yi,zi)
:slice (…,method)
:slice (hax, …)
:h= slice (…)

绘制三维数据/标量场的切片。

三维数组的每个元素v表示参数给定的标量值ata位置x,yz.参数x,yz是与数组大小相同的三维数组v在中"meshgrid"格式或向量。参数xi,等遵循类似的格式x,等等,并且它们表示数组所在的点vi使用interp3进行插值。向量sx,sysz包含各个轴的正交切片的点。

如果x,y,z被省略,它们被假定为x = 1:size (v, 2),y = 1:size (v, 1)z = 1:size (v, 3).

method是其中之一:

"nearest"

返回最近的邻居。

广告
"linear"

最近邻居的线性插值。

广告
"cubic"

来自四个最近邻居的三次插值(尚未实现)。

广告
"spline"

三次样条插值——平滑贯穿曲线的一阶导数和二阶导数。

广告

默认方法为"linear".

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

可选返回值h是createdsurface对象的图形句柄。

示例:

[x, y, z] = meshgrid (linspace (-8, 8, 32));
v = sin (sqrt (x.^2 + y.^2 + z.^2)) ./ (sqrt (x.^2 + y.^2 + z.^2));
slice (x, y, z, v, [], 0, []);

[xi, yi] = meshgrid (linspace (-7, 7));
zi = xi + yi;
slice (x, y, z, v, xi, yi, zi);

详见: interp3,surface,pcolor.

广告
 
:ribbon (y)
:ribbon (x,y)
:ribbon (x,y,width)
:ribbon (hax, …)
:h= ribbon (…)

为的列绘制函数区图yvs。x.

如果x如果省略,则假定为包含行号的向量(1:rows (Y)). 可替换地,x也可以是元素数与行数相同的向量y在哪种情况下相同x用于的每列y.

可选参数width指定单个函数区的宽度(默认值为0.75)。

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

可选返回值h是表示每个函数区的曲面对象的图形句柄的向量。

详见: surface,waterfall.

广告
 
:shading (type)
:shading (hax,type)

设置补丁或曲面图形对象的着色。

的有效参数type

"flat"

带有不可见边缘的单色补丁。

广告
"faceted"

黑色边缘的单色补丁。

广告
"interp"

将对补丁顶点之间的颜色进行插值,并且补丁边不可见。

广告

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

详见: fill,mesh,patch,pcolor,surf,surface,hidden,lighting.

广告
 
:scatter3 (x,y,z)
:scatter3 (x,y,z,s)
:scatter3 (x,y,z,s,c)
:scatter3 (…,style)
:scatter3 (…, "filled")
:scatter3 (…,prop,val)
:scatter3 (hax, …)
:h= scatter3 (…)

绘制三维散点图。

符号绘制在从向量中的坐标定义的每个点上x,yz.

符号的大小从s,可以是标量,也可以是长度与x,yz如果s如果没有给定,或者是一个空矩阵,则使用默认值8点。

符号的颜色从c,可以是定义固定颜色的字符串;三元素向量,给出颜色的红色、绿色和蓝色分量;长度与相同的向量x其将缩放后的索引提供给当前颜色图;或者单独定义每个符号的RGB颜色的Nx3矩阵。

可以使用更改要使用的符号style参数,即以与plot命令如果未指定符号,则默认为"o"或圆形。如果参数"filled"则填充符号。

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

可选返回值h是表示点的散射对象的图形句柄。

[x, y, z] = peaks (20);
scatter3 (x(:), y(:), z(:), [], z(:));

编程说明:属性的完整列表记录在Scatter Properties.

详见: scatter,patch,plot.

广告
 
:waterfall (x,y,z)
:waterfall (z)
:waterfall (…,c)
:waterfall (…,prop,val, …)
:waterfall (hax, …)
:h= waterfall (…)

绘制三维瀑布图。

瀑布图类似于meshz只打印的行的网格线z(x值)。

线框网格是使用矩形绘制的。角的顶点[x,y]通常是的输出meshgrid.在x-y平面中的2-D矩形区域上。z确定每个顶点的平面上方的高度。如果只有一个z给出矩阵,然后将其绘制在网格上x = 1:columns (z), y = 1:rows (z)。因此,的列z对应不同x值和行z对应不同y价值观

网格的颜色是通过线性缩放z值以适应当前颜色map的范围。使用caxis和/或改变颜色map以控制外观。

(可选)网格的颜色可以独立于z通过提供彩色矩阵,c.

任何属性/值对都将直接传递给基础surfaceobject。完整的属性清单记录在Surface Properties.

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

可选返回值h是createdsurface对象的图形句柄。

详见: meshz,mesh,meshc,contour,surf,surface,ribbon,meshgrid,hidden,shading,colormap,caxis.

广告

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

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