当前位置:
文档之家› MATLAB 13三维图形.ppt
MATLAB 13三维图形.ppt
[例13—28] 链接 Example08_5。
17
三维空间可视化的函数slice slice: 立体切片图。该命令显示通过立体图形的矩形切片图。 slice(X,Y,Z,V,sx,sy,sz): 在x轴、y轴与z轴方向上的若干点上画 切片图,各点的坐标由参量向量sx、sy与sz确定。参量X、参量Y 与参量Z为三维数组,用于指定立方体的坐标。参量X、Y 与Z 必 须有单调的、正交的间隔(如同用命令meshgrid 生成的一样)。 [例13—29] 链接 Example08_6。 [例13—30] 链接 Example08_7。
13.6 改变视角
三维图形的缺省视点是:以30度俯视z=0平面,以37.5度仰视x=0 平面。与z=0平面所成的方向角叫仰角,与x=0平面的夹角叫做方位 角。这样,缺省的三维视角方向仰角为30,方位角为-37.5。而缺省 的二维视角仰角为90,方位角为0。 view: 改变所有类型的二维和三维图形的图形视角。 view(az,el)和view([az,el ] ):将视角改变到所指定的方位角az和 仰角el。 [例13—18] 链接 Example06。
6
MATLAB的mesh有两个同种函数:meshc画网格图和基础的等值 线图,meshz画包含零平面的网格图。 [例13—8] 链接 Example03_3。
函数waterfall除了网格线仅在x方向出现外,其它与mesh相同。
[例13—9] 链接 Example03_4。
13.4 曲面图
曲面图,除了各线条之间的空档(称作补片)用颜色填充以外,和网 格图看起来是一样的。这种图一般使用函数surf来绘制: [例13—10] 链接 Example04。
14
[例13—23] 链接 Example07_3。
用clabel函数可标记等值线,clabel需要由contour,contourf和 contour3返回的一个等值线矩阵和一个可选择的文本字符串。 [例13—24] 链接 Example07_4。
13.8 特殊三维图
函数ribbon(Y): 把Y的各列画成单独的丝带状图。 ribbon(x,Y): 画x对Y的列的丝带状图。 ribbon(x,Y,width):width确定丝带的宽度,这里,缺省值为 0.75。 [例13—25] 链接 Example08。
[例13—20] 链接 Example07。
Pcolor函数把高度映射为一组颜色并以相同的比例显示与等值线一样 的信息,
13
pcolor 伪彩色图。 pcolor(C) 画一伪彩色图。从C 映射到当前的色图是由命令 colormap和axis定义的。 pcolor(X,Y,C) 在参数x和y指定的位置上画一由C 确定的伪彩色图。 [例13—21] 链接 Example07_1。 [例13—22] 链接 Example07_2。
10
view函数还有另一种在某些情况下更有用的形式。 view([x y z])把视点放置在连接3维空间的原点和笛卡儿坐标(z,y,z) 的向量上。视点与原点的距离不影响视觉效果。
11
例如:view([0 -10 0]),view([0 -1 0])和view([0 0])都产生相同的视 觉效果。 此外,用[za,el]=view可得到当前视点的方位角和仰角。 [例13—19] 链接 Example06_1。
comet3(z): 用向量z中的数据显示一个三维彗星。 comet3(x,y,z): 显示一个彗星通过数据x,y,z确定的三维曲线。 comet3(x,y,z,p): 指定彗星体的长度为:p*length(y)。
[例13—27] 链接 数据。 stem3(X,Y,Z,C,'filled'): 用延伸到x-y平面的直线画(X,Y,Z)中数据点。 可选择参量C确定标记类型和域颜色,而选择参量'fill'使标记被填充 到图。 stem3(Z): 画Z中的点,并自动产生X和Y的值。
[例13—25] 链接 Example08_2。
fill3: 用指定的颜色填充三维多边形。 fill3(X,Y,Z,C): 填充由参数x,y 和z 确定多边形,参数c 指定颜色。
[例13—26] 链接 Example08_3。
16
comet3: 三维空间中的彗星图。 彗星图为一个三维的动画图像,彗星头(一个小圆圈)沿着数据指定 的轨道前进,彗星体为跟在彗星头后面的一段痕迹,彗星轨道为整个 函数所画的实曲线。
3
如果能按列计算z,下面的脚本文件段会有所帮助:
4
当z中的元素必须一个一个地计算时,常常要求用嵌套循环进行计算。
5
13.3 网格图
利用在xy平面的矩形网格点上的z轴坐标值,MATLAB定义 了一个网格曲面。MATLAB通过将邻接的点用直线连接起来形成 网状曲面,其结果好像在数据点打结的鱼网。
[例13—5] 链接 Example03。
15
quiver: 矢量图或速度图 quiver(U,V): 在范围为x =1:n和y =1:m的坐标系中绘由U和V定义
的向量。 quiver(X,Y,U,V): 在点x和y上绘制由U、V定义的向量。
[例13—24] 链接 Example08_1。
quiver3(x,y,z,Nx,Ny,Nz): 显示了点(x,y,z)处的向量(Nx,Ny, N2)。
2
当z=f(x,y)能简化表示时,可以用数组运算在单个语句中 算出z的所有的值,这要求以合适的方向创建所有x与y值的矩 阵。 MATHWORKS公司称作为方格,用 meshgrid来执行。 [例13—4] 链接 Example02。 当函数不能像上面那样简单表示出来时,便只能用for循环或 while循环来计算z的元素。在很多情况下,有可能按行或按列 计算z。 例如,如果能按行计算z,下面的脚本文件段会有所帮助:
因为曲面图不能作成透明,但在一些情况下可以很方便地移 走一部分表面以便看到表面以下部分。在MATLAB中,将期望洞孔 的数据设置为特定的NaN来实现这种功能。由于NaN没有任何值, 所有的MATLAB作图函数都忽略NaN的数据点,在该点出现的地方 留下一个洞孔。
[例13—13] 链接 Example04_3。
[例13—15] 链接 Example04_5。
13.5 不规则数据的网格图和曲面图
用函数trimesh和trisurf可将不规则或非均匀间隔的数据可视化。 [例13—16] 链接 Example05。
9
伏罗诺耶(Voronoi)图是与德朗奈三角剖分关的最邻近点绘图枝术。 每个多边形围住所有比数据集合中任何其它点更接近被界定的数据点 的点。 用voronoi函数可产生数据点(x,y)的一个伏罗诺耶图。 [例13—17] 链接 Example05_1。
18
12
contour(x,y,z,n) 画出n条等高线; contour(z,v) 在指定的高度v上画出等高线; contour3 三维空间等高线图。该命令生成一个定义在矩形格栅上曲 面的三维等高线图。 contour3(Z) 画出三维空间角度观看矩阵z的等高线图,其中z的元 素被认为是距离xy平面的高度,矩阵z至少为2*2阶的。等高线的条数 与高度是自动选择的。若[m,n]=size(z),则x 轴的范围为[1:n],y 轴的范围为[1:m]。 contour3(Z,n) 画出由矩阵z确定的n条等高线的三维图。 contour3(Z,v) 在参量v 指定的高度上画出三维等高线,当然等高线 条数与向量v的维数相同;若想只画一条高度为h 的等高线,输入: contour3(Z,[h,h])。
除了上例中的输入参量,函数mesh和大多数三维绘图函数 一样可按多种输入参量调用。最通常的变更方法是使用向量,将 它传递给meshgrid,以生成x与y坐标轴。
[例13—6] 链接 Example03_1。
MATLAB中用hidden命令控制网格图的透明特性。
[例13—7] 链接 Example03_2。
8
MATLAB的surf也有两个同种函数:surfc,它画出具有基础等 值线的曲面图;surfl,它画出一个有亮度的曲面图。 [例13—14] 链接 Example04_4。
surfnorm(X,Y,Z)函数: 计算由X,Y,Z所定义曲面的曲面法线,绘制 曲面图,并在曲面的数据点上绘制向量法线。
[Nx,Ny,Nz]=surfnorm(X,Y,Z): 计算三维曲面的法线并返回其分量, 但不绘制曲面图。
第十三章 三维图形
为了显示三维数据,MATLAB提供了各种各样的函数。一些函数 可在三维空间中画线,而另一些可以画曲面和线格框架。另外,颜色 可以用来代表第四维。
13.1 曲线图
plot3 将绘制二维图形的函数plot的特性扩展到三维空间。 plot3(x1,y1,z1,S1,x2,y2,z2,S2,…) 除了包括第三维的信息(比如Z方向)之外,与二维函数 plot相同。这里xn,yn和zn是向量或矩阵,Sn是可选的字符串, 用来指定颜色、标记符号和/或线形。
contourf 填充二维等高线图。即先画出不同等高线,然后相邻的 等高线之间用同一颜色进行填充。填充用的颜色决定于当前的色图 颜色。 contourf(Z) 矩阵z的等高线图,其中z理解成距平面的高度。Z至 少为2*2 阶的。等高线的条数与高度是自动选择的。 contourf(Z,n) 画出矩阵z的n条高度不同的等高线。 contourf(Z,v) 画出矩阵z的、由v指定的高度的等高线图。
[例13—1] 链接
Example01。
1
已增加维数的plot命令可以使多个二维图形沿一个轴排列起来。
[例13—2] 链接 Example01_2。 图形沿另外方向堆列。 [例13—3] 链接 Example01_3。
13.2 两个变量的标量函数
相对于plot3产生的线条图形,常希望画出两变量的标量函数, 即z=f(x,y),这里每一对x与y的值产生一个z的值。作为x与y的函 数,z的图形是三维空间中的一个曲面。为了在MATLAB里画出这 个曲面,z的值存放在一个矩阵中。象在二维插值这一节所描述的 那样,给出x与y的值作为独立的变量,z是因变量矩阵。