函数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维矩阵。
图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.
图15.6:三维螺旋。
最后view
函数改变三维图的观点。
(x,y,z)
¶
(z)
¶
(…,c)
¶
(…,prop,val, …)
¶
(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.
(x,y,z)
¶
(z)
¶
(…,c)
¶
(…,prop,val, …)
¶
(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.
(x,y,z)
¶
(z)
¶
(…,c)
¶
(…,prop,val, …)
¶
(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.
控制网格隐藏线的删除。
当在没有参数的情况下调用时,隐藏线删除状态会切换。
使用其中一种模式调用时"on"
或"off"
相应地设置状态。
可选输出参数mode是当前状态。
“隐藏线删除”确定网格绘图后面哪些图形对象可见。默认情况下,网格是不透明的,并且网格后面的线不可见。如果禁用了隐藏线移除,则可以通过网格的面(开口)看到网格后面的对象,尽管网格网格线仍然是不透明的。
(x,y,z)
¶
(z)
¶
(…,c)
¶
(…,prop,val, …)
¶
(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.
(x,y,z)
¶
(z)
¶
(…,c)
¶
(…,prop,val, …)
¶
(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.
(z)
¶
(x,y,z)
¶
(…,lsrc)
¶
(x,y,z,lsrc,P)
¶
(…, "cdata")
¶
(…, "light")
¶
(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;
(x,y,z)
¶
(z)
¶
(…,prop,val, …)
¶
(hax, …)
¶
[Nx,Ny,Nz] =
surfnorm (…)
¶
找到垂直于网格曲面的向量。
如果x和y是向量,则典型的顶点是(xjy(i) ,z(i,j))。因此,的列z对应不同x的值和行z对应不同y价值观如果只有单个输入z则给出x是的1:columns (z)
和y是1:rows (z)
.
如果不要求返回参数,则会绘制曲面图,其中包含曲面的法线向量。
任何属性/值输入对都将指定给曲面对象。完整的属性列表记录在Surface Properties.
如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca
.
如果指定了输出参数,则在中返回法线向量的分量Nx,Ny和Nz没有阴谋。法向量未归一化(幅值!=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 (…)
¶
(…)
¶
计算三维体积数据的等值面。
等值面连接具有相同值的点,类似于等值线图,但在三维中。
输入参数v是一个三维数组,包含在体积上采样的数据。
输入isoval是一个标量,用于指定sosurface的值。如果isoval省略或为空,等值面的“好”值从v.
使用单个输出参数调用时isosurface
返回aststructure数组fv包含字段faces和vertices在点处计算[x, y, z] = meshgrid (1:l, 1:m, 1:n)
这里的[l, m, n] = size (v)
.输出fv可以直接用作的输入patch
作用
如果使用其他输入参数调用x,y和z是大小与相同的三维数组v或长度对应于的维度的向量v,然后在指定的点获取体积数据。如果x,y或z为空,网格对应于索引(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")
¶
(val,hp)
¶
(x,y,z,val,hp)
¶
(…, "negate")
¶
计算等值面的法线。
顶点法线vn根据三维数组的梯度计算val(大小:lxmxn),包含各向异性曲面几何体的数据。法线指向中的较小值val.
如果使用一个输出参数调用vn,和第二个输入自变量vert保持等值面的顶点,然后法线vn在顶点处计算vert在给定的网格上[x, y, z] = meshgrid (1:l, 1:m, 1:n)
.输出参数vn大小与相同vert并且可以用于设置"VertexNormals"
相应补丁的属性。
如果使用其他输入参数调用x,y和z,是与相同大小的三维数组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 (…)
¶
(…)
¶
为三维数据的等值面创建端盖。
此函数用于在等曲面的开放端放置封口。
输入参数v是一个三维数组,包含在体积上采样的数据。
输入isoval是一个标量,用于指定sosurface的值。如果isoval省略或为空,等值面的“好”值从v.
当使用单个输出参数调用时,isocaps
返回aststructure数组fvc具有字段:faces
,vertices
和facevertexcdata
。结果在点处计算[x, y, z] = meshgrid (1:l, 1:m, 1:n)
这里的[l, m, n] = size (v)
.输出fvc可以直接用作的输入patch
作用
如果使用其他输入参数调用x,y和z是大小与相同的三维数组v或长度对应于的维度的向量v,然后在指定的点获取体积数据。如果x,y或z为空,网格对应于索引(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)
¶
(…,hp)
¶
计算等值面颜色。
如果使用一个输出参数和第一个输入参数调用c是一个三维数组,包含索引的颜色值和第二个输入参数v是等值面几何体的顶点,然后返回矩阵cdat具有计算点处几何图形的颜色数据信息[x, y, z] = meshgrid (1:l, 1:m, 1:n)
.输出胶cdat可以用于手动设置"FaceVertexCData"
等值面补丁对象的属性。
如果使用其他输入参数调用x,y和z它们是与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,y和z可以提供来表示的坐标集v。它们可以是大小相同的矩阵v或具有根据的尺寸的大小的向量v,在这种情况下,它们被扩展为矩阵(详见meshgrid
).
如果reducevolume
则使用两个参数调用x,y和z假设与的相应索引匹配v.
在中返回缩减矩阵nv.
(可选)在中返回缩减后的坐标集nx,ny和nz分别地
示例:
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)
¶
(patch_handle)
¶
reduced_fv=
reducepatch (…,reduction_factor)
¶
reduced_fv=
reducepatch (…, "fast")
¶
reduced_fv=
reducepatch (…, "verbose")
¶
[reduced_faces,reduces_vertices] =
reducepatch (…)
¶
减少补丁对象中的面和顶点数量,同时保留补丁的整体形状。
输入补丁可以从一个结构体表示fv与字段faces
和vertices
,乘以两个矩阵faces和vertices(例如,详见的结果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与字段faces
和vertices
(详见的一个输出参数isosurface
).
如果使用两个输出参数调用,则缩减的面和顶点将在两个单独的矩阵中返回reduced_faces和reduced_vertices.
(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]。
refl=
specular (sx,sy,sz,lv,vv)
¶
refl=
specular (sx,sy,sz,lv,vv,se)
¶
计算从法线向量元素定义的表面的镜面反射强度sx,sy,sz使用Phong的近似。
光源位置和查看器位置向量是使用参数指定的lv和vv分别地位置向量可以给出为以度为单位的2-元素向量[方位角,仰角]或3-元素向量[x,y,z]。
可选的第六个参数指定镜面反射指数(扩散)se如果没有给出,se默认为10。
(type)
¶
(hax,type)
¶
设置补丁或曲面图形对象的照明。
的有效参数type是
"flat"
绘制具有分面照明效果的对象。
"gouraud"
在顶点之间绘制具有线性插值照明效果的对象。
"none"
绘制没有灯光和阴影效果的对象。
如果第一个参数hax是一个轴控制柄,然后更改此轴中对象的光照效果,而不是从返回的当前轴gca
.
只有在同一轴上至少存在一个可见光对象时,照明效果才可见。
shiny
¶
dull
¶
metal
¶
default
¶
([as,ds,ss])
¶
([as,ds,ss,se])
¶
([as,ds,ss,se,scr])
¶
(hlist, …)
¶
mtypes=
material ()
¶
refl_props=
material (mtype_string)
¶
为曲面和补丁的照明设置反射率属性。
此函数可更改所有的环境光、漫反射和镜面反射强度,以及镜面反射指数和镜面反射颜色反射率patch
和surface
当前轴中的对象。在一定程度上,这可以用于模拟某些材料在与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" |
当用三个元素的向量调用时,所有元素的环境强度、漫射强度和特殊强度patch
和surface
更新当前轴中的对象。可选的第四个向量元素更新镜面指数,可选的第五个向量元素则更新镜面颜色反射率。
图形句柄列表也可以作为第一个参数传递。在这种情况下,这些句柄和所有子对象的属性patch
和surface
对象将被更新。
此外,material
可以用单个输出参数调用。如果在没有输入参数的情况下调用,则列数组向量mtypes返回所有可用材料的字符串。如果一个inputargumentmtype_string是材料的名称,1x5元胞载体refl_props并研究了该材料的反射属性。在这两种情况下,都不会更改图形属性。
right
¶
left
¶
headlight
¶
(az,el)
¶
(…,style)
¶
(hl, …)
¶
(hax, …)
¶
h=
camlight (…)
¶
使用简单的界面将灯光对象添加到图形中。
当在没有参数的情况下调用时,会将灯光对象添加到当前绘图中,并将其放置在相机当前位置的略上方和右侧:这相当于camlight right
.命令camlight left
和camlight 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.
(az,el)
¶
(hax,az,el)
¶
(hl,az,el)
¶
hl=
lightangle (…)
¶
[az,el] =
lightangle (hl)
¶
使用球面坐标将灯光对象添加到当前轴。
灯光位置从方位角旋转指定az和内倾角el,均以度为单位。
如果第一个参数hax是一个轴控制柄,然后在此轴中创建一个新的灯光对象,而不是从返回的当前轴gca
.
如果第一个参数hl是灯光对象的句柄,然后对该灯光对象执行操作,而不是创建新对象。
可选返回值hl是灯光对象的图形句柄。
用例
将灯光对象添加到绘图
clf; sphere (36); lightangle (45, 30);
[xx,yy] =
meshgrid (x,y)
¶
[xx,yy,zz] =
meshgrid (x,y,z)
¶
[xx,yy] =
meshgrid (x)
¶
[xx,yy,zz] =
meshgrid (x)
¶
给定的向量x和y坐标,返回矩阵xx和yy对应于完整的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
输入检查有关函数的文档,以确定正确的输入格式。
[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.
(x,y,z)
¶
(x,y,z,prop,value, …)
¶
(x,y,z,fmt)
¶
(x,cplx)
¶
(cplx)
¶
(hax, …)
¶
h=
plot3 (…)
¶
制作三维绘图。
许多不同的参数组合是可能的。最简单的形式是
plot3 (x, y, z)
其中自变量被认为是要在三维中绘制的点的顶点。若所有自变量都是相同长度的向量,则绘制一条连续的直线。如果所有的参数都是矩阵,那么的每一列都被视为一行。没有试图转换参数以使行数匹配。
如果只给出两个自变量,作为
plot3 (x, cplx)
第二个自变量的实部和虚部用作y和z坐标。
如果只给出一个自变量,作为
plot3 (cplx)
参数的实部和虚部用作y和z值,并将它们与索引进行比较。
参数也可以三人一组给出,如下所示
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;");
(azimuth,elevation)
¶
([azimuth elevation])
¶
([x y z])
¶
(2)
¶
(3)
¶
(hax, …)
¶
[azimuth,elevation] =
view ()
¶
查询或设置当前轴的视点。
参数azimuth和elevation可以作为两个自变量或作为2-元素向量给出。也可以使用笛卡尔坐标指定视点x,y和z.
电话view (2)
将视点设置为azimuth= 0 以及elevation= 90 ,这是二维图的默认值。
电话view (3)
将视点设置为azimuth= -37.5 以及elevation= 30 ,这是三维图形的默认设置。
如果第一个参数hax是一个轴句柄,然后在该轴上操作,而不是在返回的当前轴上操作gca
.
如果没有输入,返回这里的azimuth和elevation.
()
¶
(h)
¶
(handle_list)
¶
(hax)
¶
移动相机并调整其属性以查看对象。
当输入为句柄时h,相机设置为指向的边界框的中心h。调整相机的位置,使边界框大致填满视野。
此命令固定相机的查看方向(camtarget() - campos()
),相机向上向量(详见camup
)和视角(详见camva
). 摄像头目标(详见camtarget
)和摄像头位置(详见campos
)都发生了变化。
如果参数是列表handle_list,然后计算所有对象的单个边界框,然后如上所述调整相机。
如果参数是轴对象hax,则轴的子对象用作handle_list。当在没有输入的情况下调用时,它使用当前轴(详见gca
).
p=
campos ()
¶
([x y z])
¶
mode=
campos ("mode")
¶
(mode)
¶
(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.
(theta,phi)
¶
(theta,phi,coorsys)
¶
(theta,phi,coorsys,dir)
¶
(theta,phi数据
¶
(theta,phi,“数据”,“z”)
¶
(theta,phi,“数据”,“x”)
¶
(theta,phi,“数据”,“y”)
¶
(theta,phi数据x y z])
¶
(theta,phi照相机
¶
(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
命令修改两个相机属性:campos
和camup
.
默认情况下,此命令会影响当前轴;或者,轴扫描从可选参数指定hax.
(theta)
¶
(hax,theta)
¶
转动相机。
将相机顺时针滚动theta度。例如,以下命令将相机顺时针(向右)滚动30度;这将导致场景看起来向左滚动30度:
peaks () camroll (30)
将相机向后滚动:
camroll (-30)
以下命令将恢复默认的相机滚转:
camup ("auto")
默认情况下,这些命令会影响当前轴;或者,轴扫描从可选参数指定hax.
t=
camtarget ()
¶
([x y z])
¶
mode=
camtarget ("mode")
¶
(mode)
¶
(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.
up=
camup ()
¶
([x y z])
¶
mode=
camup ("mode")
¶
(mode)
¶
(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.
a=
camva ()
¶
(a)
¶
mode=
camva ("mode")
¶
(mode)
¶
(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.
(zf)
¶
(hax,zf)
¶
放大或缩小相机。
的值zf大于1“放大”,使场景看起来放大:
hf = figure (); sphere (36) camzoom (1.2)
小于1的值会“缩小”,以便相机可以看到更多场景:
camzoom (0.5)
从技术上讲,缩放会影响“视角”。以下命令将重置为默认缩放:
camva ("auto") close (hf)
默认情况下,这些命令会影响当前轴;或者,轴扫描从可选参数指定hax.
(x,y,z,v,sx,sy,sz)
¶
(x,y,z,v,xi,yi,zi)
¶
(v,sx,sy,sz)
¶
(v,xi,yi,zi)
¶
(…,method)
¶
(hax, …)
¶
h=
slice (…)
¶
绘制三维数据/标量场的切片。
三维数组的每个元素v表示参数给定的标量值ata位置x,y和z.参数x,y和z是与数组大小相同的三维数组v在中"meshgrid"
格式或向量。参数xi,等遵循类似的格式x,等等,并且它们表示数组所在的点vi使用interp3进行插值。向量sx,sy和sz包含各个轴的正交切片的点。
如果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);
(y)
¶
(x,y)
¶
(x,y,width)
¶
(hax, …)
¶
h=
ribbon (…)
¶
为的列绘制函数区图yvs。x.
如果x如果省略,则假定为包含行号的向量(1:rows (Y)
). 可替换地,x也可以是元素数与行数相同的向量y在哪种情况下相同x用于的每列y.
可选参数width指定单个函数区的宽度(默认值为0.75)。
如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca
.
可选返回值h是表示每个函数区的曲面对象的图形句柄的向量。
(type)
¶
(hax,type)
¶
设置补丁或曲面图形对象的着色。
的有效参数type是
"flat"
带有不可见边缘的单色补丁。
"faceted"
黑色边缘的单色补丁。
"interp"
将对补丁顶点之间的颜色进行插值,并且补丁边不可见。
如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca
.
(x,y,z)
¶
(x,y,z,s)
¶
(x,y,z,s,c)
¶
(…,style)
¶
(…, "filled")
¶
(…,prop,val)
¶
(hax, …)
¶
h=
scatter3 (…)
¶
绘制三维散点图。
符号绘制在从向量中的坐标定义的每个点上x,y和z.
符号的大小从s,可以是标量,也可以是长度与x,y和z如果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.
(x,y,z)
¶
(z)
¶
(…,c)
¶
(…,prop,val, …)
¶
(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