第十八章三维图形 为了显示三维图形, MATLAB提供了各种各样的函数。有一些函数可在三维空 间中画线,而另一些可以画曲面与线格框架。另外,颜色可以用来代表第四维。当 颜色以这种方式使用时,由于它不再象照片中那样显示信息的自然属性-色彩,而 且也不是基本数据的内在属性,所以它称作伪彩色。为了简化对三维图形的讨论 对颜色的介绍推迟到下一章。在这一章,主要讨论绘制三维图形的基本概念。 18.1函数p|ot3 plot3命令将绘制二维图形的函数plot的特性扩展到三维空间。函数格式除了包 括第三维的信息(比如Z方向)之外,与二维函数plot相同。plot3一般语法调用 格式是plot3(x1y1,z1,S1,x2,y2,z2S2…),这里xnyn和是向量或矩阵,Sn是可选的字 符串,用来指定颜色、标记符号和或线形。 总的来说,pot3可用来画一个单变量的三维函数。如下为一个三维螺旋线例子: t=0pi50:10*pi; >)plot(sin(t), cos(t), t) ttl( Helix‘) xlabel(‘sint(t') ylabel(‘cos(t)), zlabel(‘t >)text(0,0,0, Origin') grid ))v-axIs 输出见图181
第十八章 三维图形 为了显示三维图形,MATLAB 提供了各种各样的函数。有一些函数可在三维空 间中画线,而另一些可以画曲面与线格框架。另外,颜色可以用来代表第四维。当 颜色以这种方式使用时,由于它不再象照片中那样显示信息的自然属性----色彩,而 且也不是基本数据的内在属性,所以它称作伪彩色。为了简化对三维图形的讨论, 对颜色的介绍推迟到下一章。在这一章,主要讨论绘制三维图形的基本概念。 18.1 函数 plot3 plot3 命令将绘制二维图形的函数 plot 的特性扩展到三维空间。函数格式除了包 括第三维的信息(比如 Z 方向)之外,与二维函数 plot 相同。plot3 一般语法调用 格式是 plot3(x1,y1,z1,S1,x2,y2,z2,S2,…),这里 xn,yn 和 zn 是向量或矩阵,Sn 是可选的字 符串,用来指定颜色、标记符号和/或线形。 总的来说,plot3 可用来画一个单变量的三维函数。如下为一个三维螺旋线例子: » t=0:pi/50:10*pi; » plot3(sin(t),cos(t),t) » title( ‘ Helix ‘ ),xlabel( ‘ sint(t) ‘ ),ylabel( ‘ cos(t) ‘ ),zlabel( ‘ t ‘ ) » text(0,0,0, ‘ Origin ‘ ) » grid » v = axis v = -1 1 -1 1 0 40 输出见图 18.1
40 20 10 05 05 -0.5 -0.5 cos(t) 图18.1螺旋线图 从上例可明显看出,二维图形的所有基本特性在三维中仍都存在。axis命令扩 展到三维 只是返回Z轴界限(0和40),在数轴向量中增加两个元素。函数 zlabel用来指定 z轴的数据名称,函数grid在图底绘制三维网格。函数 test(x,y,z," string")在由三 维坐标x,y,所指定的位置放一个字符串。另外,子图和多图形窗口可以直接应用到 三维图形中 在最后一章可以看到,通过指定plot命令的多个参量或使用hold命令,可以把 多条直线或曲线重叠画出。plot3以及其它的三维图形函数都可以提供相同的能力 例如,增加维数的plot命令可以使多个二维图形沿一个轴排列起来,而不是直接 将二维图形叠到另一个的上面 >)x=linspace(0, 3pi); % X-axis data >)ZI=sin(x); plot in x-z plane ) >)y1=zeros(size(x)); spread out along y-axis ))y3=zeros(size(x)); by giving each diffent y-axis valu y2=3/2
图 18.1 螺旋线图 从上例可明显看出,二维图形的所有基本特性在三维中仍都存在。axis 命令扩 展到三维 只是返回 Z 轴界限(0 和 40),在数轴向量中增加两个元素。函数 zlabel 用来指定 z 轴的数据名称,函数 grid 在图底绘制三维网格。函数 test(x,y,z, ‘ string ‘ )在由三 维坐标 x,y,z 所指定的位置放一个字符串。另外,子图和多图形窗口可以直接应用到 三维图形中。 在最后一章可以看到,通过指定 plot 命令的多个参量或使用 hold 命令,可以把 多条直线或曲线重叠画出。plot3 以及其它的三维图形函数都可以提供相同的能力。 例如,增加维数的 plot3 命令可以使多个二维图形沿一个轴排列起来,而不是直接 将二维图形叠到另一个的上面。 » x=linspace(0,3*pi); % x-axis data » z1=sin(x); % plot in x-z plane » z2=sin(2*x); » z3=sin(3*x); » y1=zeros(size(x)); % spread out along y-axis » y3=zeros(size(x)); % by giving each diffent y-axis values » y2=y3/2;
>)plot(x,yl, zl, x, y2, Z2, x, y3, z3); >) grid, xlabel( X-axis), ylabel('y-axis, abel( z-axis) itle( sin(x), sin(2 x), sin(3x)') 输出见图182 sin(x), sin(2x),sin(3x) 0.5 -05 0.5 -0.5 图182正弦曲线图 上述图形也可以沿另外方向堆列。 >)plot(x, zl,yl, x, Z2, y2, x, Z3, y3) >)grid, xlabel(X-axis, ylabel( y-axis), zlabel( ' Z-axis) title(‘sin(x)sin(2x),sin(3x)‘) 输出见图18.3
» plot3(x,y1,z1,x,y2,z2,x,y3,z3); » grid,xlabel( ‘ x-axis ‘ ),ylabel( ‘ y-axis ‘ ,abel( ‘ z-axis ‘ ) » title( ‘ sin(x),sin(2x),sin(3x) ‘ ) 输出见图 18.2. 图 18.2 正弦曲线图 上述图形也可以沿另外方向堆列。 » plot3(x,z1,y1,x,z2,y2,x,z3,y3) » grid,xlabel( ‘ x-axis ‘ ,ylabel( ‘ y-axis ‘ ),zlabel( ‘ z-axis ‘ ) » title( ‘ sin(x),sin(2x),sin(3x) ‘ ) 输出见图 18.3
in(x) sin(2x), sin(x) 0.5 0 0.5 -0.5 图183正弦曲线图 18.2改变视角 注意两个图形,一个是以30度视角向下看z=0平面,一个是以37.5度视角向上 看x=0平面。这是对所有三维图形的缺省视角。与z=0平面所成的方向角叫仰角, 与x=0平面的夹角叫做方位角。这样,缺省的三维视角方向仰角为30度,方位角 为-37.5度。而缺省的二维视角仰角为90度,方位角为0度。仰角和方位角的概念 在图184中形象地画出
图 18.3 正弦曲线图 18.2 改变视角 注意两个图形,一个是以 30 度视角向下看 z=0 平面,一个是以 37.5 度视角向上 看 x=0 平面。这是对所有三维图形的缺省视角。与 z=0 平面所成的方向角叫仰角, 与 x=0 平面的夹角叫做方位角。这样,缺省的三维视角方向仰角为 30 度,方位角 为-37.5 度。而缺省的二维视角仰角为 90 度,方位角为 0 度。仰角和方位角的概念 在图 18.4 中形象地画出
图184仰角和方位角示意图 Default Az =-37,5.E1 30 Az Rotated to 52.5 05 10 05 Y-axis 00 x-axis X-axis 100 Y-axis E1 Increased to 60 Az=0E1=90 05 5 图18.5视角举例图
图 18.4 仰角和方位角示意图 图 18.5 视角举例图