Matlab在三维建模计算的应用

上传人:壹****1 文档编号:513747166 上传时间:2022-08-15 格式:DOC 页数:17 大小:71KB
返回 下载 相关 举报
Matlab在三维建模计算的应用_第1页
第1页 / 共17页
Matlab在三维建模计算的应用_第2页
第2页 / 共17页
Matlab在三维建模计算的应用_第3页
第3页 / 共17页
Matlab在三维建模计算的应用_第4页
第4页 / 共17页
Matlab在三维建模计算的应用_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《Matlab在三维建模计算的应用》由会员分享,可在线阅读,更多相关《Matlab在三维建模计算的应用(17页珍藏版)》请在金锄头文库上搜索。

1、-Matlab在三维建模计算的应用为了显示三维图形,MATLAB提供了各种各样的函数。有一些函数可在三维空间中画线,而另一些可以画曲面与线格框架。另外,颜色可以用来代表第四维。当颜色以这种方式使用时,由于它不再象照片中那样显示信息的自然属性-色彩,而且也不是根本数据的在属性,所以它称作伪彩色。为了简化对三维图形的讨论,对颜色的介绍推迟到下一章。在这一章,主要讨论绘制三维图形的根本概念。18.1 函数plot3plot3命令将绘制二维图形的函数plot的特性扩展到三维空间。函数格式除了包括第三维的信息比方Z方向之外,与二维函数plot一样。plot3一般语法调用格式是plot3(*1,y1,z1

2、,S1,*2,y2,z2,S2,),这里*n,yn和zn是向量或矩阵,Sn是可选的字符串,用来指定颜色、标记符号和/或线形。总的来说,plot3可用来画一个单变量的三维函数。如下为一个三维螺旋线例子: t=0:pi/50:10*pi; plot3(sin(t),cos(t),t) title( Heli* ),*label( sint(t) ),ylabel( cos(t) ),zlabel( t ) te*t(0,0,0, Origin ) grid v = a*isv = -1 1 -1 1 0 40输出见图18.1.图18.1 螺旋线图从上例可明显看出,二维图形的所有根本特性在三维中仍都

3、存在。a*is命令扩展到三维只是返回Z轴界限0和40,在数轴向量中增加两个元素。函数zlabel用来指定z轴的数据名称,函数grid在图底绘制三维网格。函数test(*,y,z, string )在由三维坐标*,y,z所指定的位置放一个字符串。另外,子图和多图形窗口可以直接应用到三维图形中。在最后一章可以看到,通过指定plot命令的多个参量或使用hold命令,可以把多条直线或曲线重叠画出。plot3以及其它的三维图形函数都可以提供一样的能力。例如,增加维数的plot3命令可以使多个二维图形沿一个轴排列起来,而不是直接将二维图形叠到另一个的上面。 *=linspace(0,3*pi); % *-

4、a*is data z1=sin(*); % plot in *-z plane z2=sin(2*); z3=sin(3*); y1=zeros(size(*); % spread out along y-a*is y3=zeros(size(*); % by giving each diffent y-a*is values y2=y3/2; plot3(*,y1,z1,*,y2,z2,*,y3,z3); grid,*label( *-a*is ),ylabel( y-a*is ,abel( z-a*is ) title( sin(*),sin(2*),sin(3*) )输出见图18.2.

5、图18.2 正弦曲线图上述图形也可以沿另外方向堆列。 plot3(*,z1,y1,*,z2,y2,*,z3,y3) grid,*label( *-a*is ,ylabel( y-a*is ),zlabel( z-a*is ) title( sin(*),sin(2*),sin(3*) )输出见图18.3.图18.3 正弦曲线图18.2 改变视角注意两个图形,一个是以30度视角向下看z=0平面,一个是以37.5度视角向上看*=0平面。这是对所有三维图形的缺省视角。与z=0平面所成的方向角叫仰角,与*=0平面的夹角叫做方位角。这样,缺省的三维视角方向仰角为30度,方位角为-37.5度。而缺省的二维

6、视角仰角为90度,方位角为0度。仰角和方位角的概念在图18.4中形象地画出。图18.4 仰角和方位角示意图图18.5 视角举例图在MATLAB中,函数view改变所有类型的二维和三维图形的图形视角。view(az,el)和view(az,el)将视角改变到所指定的方位角az和仰角el。考虑下面脚本M文件形式的例子。% viewpoint e*ample using subplots*=linspace(0,3*pi).;Z=sin(*) sin(2*) sin(2*); % create Y and Z a*es as matricesY=zeros(size(*) ones(size(*)/

7、2 ones(size(*);subplot(2,2,1)plot3(*,Y,Z) % plot3 works with column-oriented matrices toogrid,*label( *-a*is ),ylabel( Y-a*is ),zlabel( Z-a*is )title( Default Az = -37.5,E1 = 30 )view(-37.5,30)subplot(2,2,2) plot3(*,Y,Z) grid,*label( *-a*is ),ylabel( Y-a*is ),zlabel( Z-a*is )title( Az Rotated to 52.

8、5 )view(-37.5+90,30)subplot(2,2,3)plot3(*,Y,Z) grid,*label( *-a*is ),ylabel( Y-a*is ),zlabel( Z-a*is )title( E1 Increased to 60 )view(-37.5,60)subplot(2,2,4)plot3(*,Y,Z) grid,*label( *-a*is ),ylabel( Y-a*is )title( Az = 0,E1 = 90 )view(0,90)输出见图18.5。除了上面的形式,view还提供了综合在表18.1的其它特性:表18.1函数viewview(az,e

9、l)将视图设定为方位角az和仰角elview(az,el)view(*,y,z)在笛卡儿坐标系中将视图设为沿向量*,y,z指向原点,例如view(0 0 1)=view(0,90)view(2)设置缺省的二维视角,az=0,el=90view(3)设置缺省的三维视角,az=-37.5,el=30az,el=view返回当前的方位角az和仰角elview(T)用一个44的转矩阵T来设置视图角T=view返回当前的44转矩阵最后,为了演示MATLAB句柄图形能力,精通MATLAB工具箱包含了函数mmview3d。在产生二维或三维图形后调用此函数, mmview3d,在当前图形中放置水平角和方位角滑

10、标滚动条以设置视角。使用函数mmview3d的更详细的信息见在线帮助。18.3 两个变量的标量函数相对于plot3产生的线条图形,经常希望画出两个变量的标量函数,比方:z=f(*,y)这里每一对*与y的值产生一个z的值。它作为*与y的函数,是三维空间中的一个曲面。为了在MATLAB里画出这个曲面,z的值存放在一个矩阵中。象在*二维插值这一节所描述的那样,给出*与y的值作为独立的变量,z是因变量矩阵,*、y与z的联系就是:z(i,:)=f(*,y(i) and z(:,j)=f(*(j),y)即z的第i行与的y第i个元素相关,而z的第j列与*的第个j元素相关。或者说,y沿着z的列变化,而*沿着z

11、的行变化。当z=f(*,y)能简化表示时,可以方便地用数组运算在单个语句中算出z的所有的值。这样做,要求我们以适宜的方向创立所有*与y值的矩阵。这种方向有时被Mathwork公司称作为方格)。MATLAB提供了函数meshgrid来执行这个步骤。 *=-3:3; % choose *-a*isd values y=1:5; % y-a*is values *,Y=meshgrid(*,y)* = -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3Y = 1 1 1 1 1 1

12、1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5 5 5如上所见,函数meshgrid对y中行的每一行复制*,同样也对*中列的每一列复制y。这种方向与前面语句相一致,即y向下改变其列,而*横跨改变其行。给定*和Y,如果z=f(*,y)=(*+y)2,则z便定义一个三维曲面的数据矩阵: Z=(*+Y).2Z = 4 1 0 1 4 9 16 1 0 1 4 9 16 25 0 1 4 9 16 25 36 1 4 9 16 25 36 49 4 9 16 25 36 49 64当函数不能象上面那样简单表示出来时,便只能用 For 循环或

13、While 循环来计算Z的元素。在很多情况下,有可能按行或按列计算Z。例如,如果能按行计算Z,下面的脚本文件段会很有帮助:*= % statement defining vector of *-a*is valuesy= % statement defining vector of y-a*is valuesn*=length(*); % length of * is no. of rows in Zny=length(y); % length of y is no. of columns in ZZ=zeros(n*,ny); % initialize Z matri* for speedfor r=1:n*preliminary mandsZ(r,:)=a function of y and *(r) defining r-th row of Zend相反,如果能按列计算Z,下面的脚本文件段会很有帮助:*= % sta

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号