Matlab期末作业-李家兴20131336013_第1页
Matlab期末作业-李家兴20131336013_第2页
Matlab期末作业-李家兴20131336013_第3页
Matlab期末作业-李家兴20131336013_第4页
Matlab期末作业-李家兴20131336013_第5页
已阅读5页,还剩16页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Matlab基础及应用教程期末作业学号20131336013姓名李家兴一、M文件及注释用Matlab绘制管状几何体利用MATLAB绘制管状几何体,所谓管状几何体就是中空的像水管一样的几何体。MATLAB函数TubeLike,可以根据管道中心线坐标及各点处管道半径绘制管状几何体。程序M文件function[X,Y,Z]=TubeLike(x,y,z,r)%绘制三维管道型立体%TubeLike(x,y,z)绘制三维管道型几何体,输入参数x,y,z分别为管道中心线各点处%的坐标,x,y和z应为等长的向量,此时管道具有统一的半径1.%%TubeLike(x,y,z,r)输入参数r用来指定管道半径。r可以是标量,也可以是与x,y,z等%长的向量。当r是标量时,管道具有统一半径;当r是向量时,管道%各截面处可以有不同的半径。%%TubeLike(x)输入参数x为3行或3列的矩阵,用来指定管道中心线各点处的坐标,%此时管道具有统一的半径1.%%TubeLike(x,r)输入参数x为3行或3列的矩阵,用来指定管道中心线各点处的坐标,%输入参数r(标量或向量)用来指定管道半径。%%[X,Y,Z]=TubeLike(...)输出三维管道型几何体的网格数据X,Y和Z.%%Example:%t=linspace(0,2*pi,50);%x=sin(t);%y=cos(t);%z=cos(t/2);%r=sin(t);%TubeLike(x,y,z,r)ifnargin>=1&&nargin<=2%检查数据维数是否正确[m,n]=size(x);p=min(m,n);%维数ifp~=3error('应输入三维样本数据,并且样本容量应大于3');end%把样本观测值矩阵转置,使得行对应变量,列对应观测ifm>=nx=x';endyd=x(2,:);zd=x(3,:);xd=x(1,:);ifnargin==1r=ones(size(xd));elseifisvector(y)ifnumel(y)==1r=y*ones(size(xd));elseifnumel(y)>1&&numel(y)==length(xd)r=y(:)';elseerror('半径应为标量或与x等长的向量');endelseerror('半径应为标量或与x等长的向量');endendelseifnargin>=3&&nargin<=4ifisvector(x)&&isvector(y)&&isvector(z)numxyz=[numel(x),numel(y),numel(z)];ifany(numxyz-min(numxyz))error('管道中心坐标x,y,z应为等长的向量');elsexd=x(:)';yd=y(:)';zd=z(:)';endelseerror('管道中心坐标x,y,z应为等长的向量');endifnargin==3r=ones(size(xd));elseifisvector(r)ifnumel(r)==1r=r*ones(size(xd));elseifnumel(r)>1&&numel(r)==length(xd)r=r(:)';elseerror('半径应为标量或与x等长的向量');endelseerror('半径应为标量或与x等长的向量');endendelseerror('至少需要1个输入参数,至多需要4个输入参数');endt=linspace(0,2*pi,30)';%角度向量%x的一阶差分dx=diff(xd);dx=[dx(end)dx];%y的一阶差分dy=diff(yd);dy=[dy(end)dy];%z的一阶差分dz=diff(zd);dz=[dz(end)dz];%计算法线与y轴正向夹角余弦,法线与y轴正向夹角正弦负值den1=sqrt(dx.^2+dy.^2);cy=dy./den1;cy(den1==0)=1;sy=-dx./den1;sy(den1==0)=0;%计算法线与z轴正向夹角余弦,法线与z轴正向夹角正弦负值den2=sqrt(dx.^2+dy.^2+dz.^2);cz=dz./den2;cz(den2==0)=1;sz=-sqrt(dx.^2+dy.^2)./den2;sz(den2==0)=0;OneMat=ones(numel(t),1);%1向量%管道中心线坐标矩阵Xcenter=OneMat*xd;Ycenter=OneMat*yd;Zcenter=OneMat*zd;%单位圆坐标数据x0=cos(t);y0=sin(t);%计算三维管道型几何体的网格数据X,Y和ZXgrid=Xcenter+x0*(r.*cy)-y0*(r.*cz.*sy);Ygrid=Ycenter+x0*(r.*sy)+y0*(r.*cz.*cy);Zgrid=Zcenter+y0*(r.*sz);%输出图形或网格数据ifnargout==0surf(Xgrid,Ygrid,Zgrid);%绘制三维曲面图形elseX=Xgrid;Y=Ygrid;Z=Zgrid;EndM文件见附件二、程序运行实例1、绘制扭结%Example1:扭结n=100;r=0.75;q=floor(n/3);%向下舍入t=(0:n)/n;a=2;b=3;c=1.5;q1=2;q2=4;f0=sin(q1*pi*t)+a*sin(q2*pi*t)-...b*cos(4*pi*t)/2+c*sin(6*pi*t);f0=[f0(1:n)f0(1:n)];x=f0(1:n+1);%管道中心线x点y=f0(q+1:q+n+1);%管道中心线y点z=f0(2*q+1:2*q+n+1);%管道中心线z点figure(1)%绘制图形TubeLike(x,y,z,r)%调用TubeLike程序shadinginterp;%进行彩色的插值处理,是彩色平滑过度light%照明模式lightinggouraud%光源模式点模式光照单元为图形的像素点view(2)%调整3d图形显示的角度axisequaloff%坐标轴长度相等关闭axisvis3d%冻结屏幕高宽比2、绘制立体太极图%Example2:太极t=linspace(pi,0,50);%从0到π分50个点x0=cos(t);%单位圆x0坐标y0=sin(t);%单位圆y0坐标x=[x0-1x0+1fliplr(2*x0)2*x0];%管道中心线x点y=[y0-y0fliplr(2*y0)-2*y0];%管道中心线y点z=zeros(size(x));%管道中心线z点figure(2)%绘制图形[X,Y,Z]=TubeLike(x,y,z,0.2);%输出三维管道型几何体的网格数据X,Y和Zsurf(X,Y,Z,'FaceColor',[100],'LineStyle','none');%绘制三维曲面图形[X,Y,Z]=sphere;%绘制单位球体holdon%开启图形保持surf(0.2*X-1,0.2*Y,0.2*Z,'FaceColor',[010],'LineStyle','none');%绘制三维曲面surf(0.2*X+1,0.2*Y,0.2*Z,'FaceColor',[001],'LineStyle','none');%绘制三维曲面holdoff%取消原来的图view(3)%调整3d图形显示的角度axisequaloff%坐标轴长度相等关闭light%设置光源3、绘制田螺%Example3:田螺t=linspace(0,7*pi,200);%0到7π分200个点x=t.*cos(t)*0.1;%管道中心线x点y=t.*sin(t)*0.1;%管道中心线y点z=[1:numel(t)]*0.01;%管道中心线z点r=sqrt([0:numel(t)-1]*0.004);%管道半径rfigure(3)%画图TubeLike(x,y,z,r)%调用TubeLike函数view(-44,-52)%调整3d图形显示的角度角度-44,仰视角-52axisequaloff%坐标轴长度相等关闭代码运行绘制三维管道型立体TubeLike(x,y,z)绘制三维管道型几何体,输入参数x,y,z分别为管道中心线各点处的坐标,x,y和z应为等长的向量,此时管道具有统一的半径1.TubeLike(x,y,z,r)输入参数r用来指定管道半径。r可以是标量,也可以是与x,y,z等长的向量。当r是标量时,管道具有统一半径;当r是向量时,管道各截面处可以有不同的半径。TubeLike(x)输入参数x为3行或3列的矩阵,用来指定管道中心线各点处的坐标,此时管道具有统一的半径1.TubeLike(x,r)输入参数x为3行或3列的矩阵,用来指定管道中心线各点处的坐标,输入参数r(标量或向量)用来指定管道半径。[X,Y,Z]=TubeLike(...)输出三维管道型几何体的网格数据X,Y和Z.三、主要设计内容1检查数据维数是否正确2把样本观测值矩阵转置,使得行对应变量,列对应观测3计算角度向量4计算x的一阶差分5计算y的一阶差分6计算z的一阶差分7计算法线与y轴正向夹角余弦,法线与y轴正向夹角正弦负值8计算法线与z轴正向夹角余弦,法线与z轴正向夹角正弦负值9管道中心线坐标矩阵10单位圆坐标数据11计算三维管道型几何体的网格数据X,Y和Z12输出图形或网格数据四、主要函数信息Isvector函数isvector(X)是判断是否矢量(包括常量)。是的话返回true即逻辑值1,非即返回false即逻辑值0所以你这句是x非矢量时为真并执行if后语句其实可以简化为if(~isvector(x))

Nargin函数nargin是用来判断输入变量个数的函数,这样就可以针对不同的情况执行不同的功能。通常可以用他来设定一些默认值。例子,函数test1的功能是输出a和b的和。如果只输入一个变量,则认为另一个变量为0,如果两个变量都没有输入,则默认两者均为0。functiony=test1(a,b)ifnargin==0a=0;b=0;elseifnargin==1b=0;endy=a+b;Size函数size():获取矩阵的行数和列数(1)s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时矩阵的行数,第二个元素是矩阵的列数。

(2)[r,c]=size(A),

当有两个输出参数时,size函数将矩阵的行数返回到第一个输出变量r,将矩阵的列数返回到第二个输出变量c。(3)size(A,n)如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则size将返回矩阵的行数或列数。其中r=size(A,1)该语句返回的时矩阵A的行数,c=size(A,2)该语句返回的时矩阵A的列数。另外,length()=max(size()).Validateattributes函数函数validateattributes,检查序列的大小size形状shape。ParseInputs函数一般是内建函数的参数处理过程。等号左边中括号的内容是ParseInputs函数的多个输出,这也是matlab的一个特点:函数可以同时输出多个变量。

这个ParseInputs在很多matlab内部函数中都有。主要用于从用户调用函数的输入变量中获得并“整理”出函数所需要的东西,例如,根据输入变量的个数、类型不同,函数的处理方式可能也有变化Figure函数Figure控制制图窗口Diff函数diff函数用以演算一函数的微分项,相关的函数语法有下列4个:diff(f)传回f对预设独立变数的一次微分值diff(f,'t')传回f对独立变数t的一次微分值diff(f,n)传回f对预设独立变数的n次微分值diff(f,'t',n)传回f对独立变数t的n次微分值也即matlab求导命令diff调用格式:diff(函数),求的一阶导数;diff(函数,n),求的n阶导数(n是具体整数);diff(函数,变量名),求对的偏导数;diff(函数,变量名,n),求对的n阶偏导数;Linspace函数linspace(x1,x2,n)

linspace是Matlab中的一个指令,用于产生x1,x2之间的N点行矢量。其中x1、x2、N分别为起始值、中止值、元素个数。若缺省N,默认点数为100。linspace(x0,x1,n)

其中n代表的是点的数目,即分成n-1等分。

步长应当是(x1-x0)/(n-1)Repmat函数repmat即ReplicateMatrix,复制和平铺矩阵,是MATLAB里面的一个函数。一、repmat(NaN,m,n)等价于NaN(m,n).二、repmat(single,inf,m,n)等价于inf(m,n,'single').三、repmat(int8(0),m,n)等价于zeros(m,n,'int8').四、repmat(uint32(1),m,n)等价于ones(m,n,'uint32').五、repmat(eps,m,n)等价于eps(ones(m,n)).Mat2gray函数mat2gray实现图像矩阵的归一化操作。所谓"归一化"就是使矩阵的每个元素的值都在0和1之间。该函数在数字图像处理中经常用到。I=mat2gray(A,[aminamax])将图像矩阵A中介于amin和amax的数据归一化处理,其余小于amin的元素都变为0,大于amax的元素都变为1。I=mat2gray(A)将图像矩阵A归一化为图像矩阵I,归一化后矩阵中每个元素的值都在0到1范围内(包括0和1)。其中0表示黑色,1表示白色。Shading函数shading是用来处理色彩效果的,分以下三种:

noshading一般的默认模式即shadingfaceted

shadingflat在faceted的基础上去掉图上的网格线

shadinginterp在flat的基础上进行色彩的插值处理,使色彩平滑过渡View函数view是用来调整3d图形显示的角度的view(a,b)a是角度,b是仰视角Light函数light('Co

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论