关于利用matlab制作三维图形的经典例子资料
- 格式:doc
- 大小:2.06 MB
- 文档页数:11
实验9 三维绘图一、实验目的学会MATLAB软件中三维绘图的方法。
二、实验内容与要求1.三维曲线图格式一:plot3(X,Y,Z,S).说明:当X,Y,Z均为同维向量时,则plot3描出点X(i),Y(i),Z(i)依次相连的空间曲线.若X,Y均为同维矩阵,X,Y,Z每一组相应列向量为坐标画出一条曲线,S为‘color﹣linestyle﹣marker’控制字符表1.6~表1.10.【例1.79】绘制螺旋线.>>t=0:pi/60:10*pi;>>x=sin(t);>>y=cos(t);>>plot3(x,y,t,’*-b’)>>grid on图形的结果如图1.16所示.格式二:comet3(x,y,z).说明:显示一个彗星通过数据x,y,z确定的三维曲线.【例1.80】>>t=-20*pi:pi/50:20*pi;>>comet3(sin(t),cos(t),t)可见到彗星头(一个小圆圈)沿着数据指定的轨道前进的动画图象,彗星轨道为整个函数所画的螺旋线.格式三:fill3(X,Y,Z,C) ℅填充由参数X,Y,Z确定的多边形,参数C指定颜色.图1.16 例1.79图形结果图1.17 例1.81图形结果【例1.81】>>X=[2,1,2;9,7,1;6,7,0];>>Y=[1,7,0;4,7,9;0,4,3];>>Z=[1,8,6;7,9,6;1,6,1];>>C=[1,0,0;0,1,0;0,0,1]>>fill3(X,Y,Z,C)>>grid on图形的结果如图1.17所示.问题 1.30:图 1.17中每个三角形按什么规律画出的?(用X,Y,Z的对应列元素值为坐标画三角形)每个三角形内填充的颜色又有何规律?(用C 第i列元素值对应的颜色,从第i个三角形对应顶点向中心过渡)若C=[1,5,10;1,5,10;1,5,10],结果如何?2.三维网格图格式:mesh(X,Y,Z,C) ℅画出颜色由C指定的三维网格图.meshc(X,Y,Z,C) ℅画出带有等高线的三维网格图.meshz(X,Y,Z,C) ℅画出带有底座的三维网格图.说明:若X与Y均为向量,n=length(X),m=length(Y), Z必须满足[m,n]=size(Z),则空间中的点(X(j),Y(i),Z(i,j))为所画曲面网线的交点,X 对应于Z的列,Y对应于Z的行;若X,Y,Z均为同维矩阵,则空间中的点(X(i,j),Y(i,j),Z(i,j))为所画曲面的网线的交点;矩阵C指定网线的颜色,MATLAB对矩阵C中的数据进行线性处理,以便从当前色图中获得有用的颜色,若C缺省,网线颜色和曲面的高度Z相匹配.在三维作图常用到命令meshgrid,其功能是生成二元函数z=f(x,y)中x-y平面上的矩形定义域中数据点矩阵X和Y.格式:[X,Y]= meshgrid(x,y).说明:输入向量x为x-y平面上x轴的值,向量y为x-y平面上y轴的值.输出矩阵X为x-y平面上数据点的横坐标值,输出矩阵Y为x-y平面上数据点的纵坐标值.【例1.82】>> x=1:4;>> y=1:5;>> [x,y]=meshgrid(x,y)x =1 2 3 41 2 3 41 2 3 41 2 3 41 2 3 4y =1 1 1 12 2 2 23 3 3 34 4 4 45 5 5 5图1.18所示x-y 平面上的矩形定义域中20个数据点(星号点)的坐标就是有X ,Y 决定的。
三维绘图1 三维绘图指令2 基本XYZ立体绘图命令mesh和plot是三度空间立体绘图的基本命令,mesh可画出立体网状图,plot则可画出立体曲面图,两者产生的图形都会依高度而有不同颜色。
下列命令可画出由函数形成的立体网状图:x=linspace(-2, 2, 25); % 在x轴上取25点y=linspace(-2, 2, 25); % 在y轴上取25点[xx,yy]=meshgrid(x, y); % xx和yy都是25x25的矩阵zz=xx.*exp(-xx.^2-yy.^2); % 计算函数值,zz也是21x21的矩阵mesh(xx, yy, zz); % 画出立体网状图●surf和mesh的用法类似:x=linspace(-2, 2, 25); % 在x轴上取25点y=linspace(-2, 2, 25); % 在y轴上取25点[xx,yy]=meshgrid(x, y); % xx和yy都是25x25的矩阵zz=xx.*exp(-xx.^2-yy.^2); % 计算函数值,zz也是25x25的矩阵surf(xx, yy, zz); % 画出立体曲面图●peaks为了方便测试立体绘图,MATLAB提供了一个peaks函数,可产生一个凹凸有致的曲面,包含了三个局部极大点及三个局部极小点,其方程式为:要画出此函数的最快方法即是直接键入peaks:peaksz = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) - 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) -1/3*exp(-(x+1).^2 - y.^2)●我们亦可对peaks函数取点,再以各种不同方法进行绘图。
meshz可将曲面加上围裙:[x,y,z]=peaks;meshz(x,y,z);●waterfall可在x方向或y方向产生水流效果:[x,y,z]=peaks;waterfall(x,y,z);●下列命令产生在y方向的水流效果:[x,y,z]=peaks;waterfall(x',y',z');●meshc同时画出网状图与等高线:[x,y,z]=peaks;meshc(x,y,z);●surfc同时画出曲面图与等高线:[x,y,z]=peaks;surfc(x,y,z);●contour3画出曲面在三度空间中的等高线:contour3(peaks, 20);●contour画出曲面等高线在XY平面的投影:contour(peaks, 20);plot3可画出三度空间中的曲线:t=linspace(0,20*pi, 501);plot3(t.*sin(t), t.*cos(t), t);亦可同时画出两条三度空间中的曲线:t=linspace(0, 10*pi, 501);plot3(t.*sin(t), t.*cos(t), t, t.*sin(t), t.*cos(t), -t);3 三维绘图的主要功能绘制三维线图绘制等高线图绘制伪彩色图绘制三维网线图绘制三维曲面图、柱面图和球面图绘制三维多面体并填充颜色(一)三维线图plot3 ——基本的三维图形指令调用格式:plot3(x,y,z) —— x,y,z是长度相同的向量plot3(X,Y,Z) —— X,Y,Z是维数相同的矩阵plot3(x,y,z,s) ——带开关量plot3(x1,y1,z1,’s1’,x2,y2,z2,’s2’,…)二维图形的所有基本特性对三维图形全都适用。
软件学院 MATLAB程序设计课程实验报告201 ~201 学年第学期级专业班级:学号:姓名:实验五三维图形绘制一、实验目的1.掌握通用绘图函数的使用2.掌握基本三维图形绘制3.熟悉可视化图形绘制的基本技巧二、实验内容1.通用绘图函数的使用2. 三维图形绘制三、实验环境1.工具软件:MATLAB2012b四、实验步骤1. 通用绘图函数的使用(1) plot3函数-三维曲线图形绘制函数t = 0:pi/50:10*pi;plot3(sin(t),cos(t),t)xlabel('sin(t)')ylabel('cos(t)')zlabel('t')grid onaxis square(2)plot3函数的操作2>> t = 0:pi/50:2*pi;>> x=[sin(t) sin(t)];>> y=[cos(t) cos(t)];>>z=[ sin(t).^2+cos(t).^2 sin(t).^2+cos(t).^2+1];>>plot3(x,y,z)(3)mesh函数—三维网格曲面>> x = -4:0.1:4;>> y=x'>> m=ones(size(y))*x;>> n=y*ones(size(x));>> p=sqrt(m.^2+n.^2)+eps;>> z=sin(p)./p;>> mesh(z)(4)mesh函数的操作2x = -4:0.1:4;[x,y]=meshgrid(x);p=sqrt(x.^2+y.^2)+eps;z=sin(p)./p;mesh(z);xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('mesh')(5)surf函数—三维曲面x=0:0.1:2*pi;[x,y]=meshgrid(x);z=sin(y).*cos(x);surf(x,y,z);xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('surf');(6)比较surf函数、mesh函数及plot3函数x=0:0.1:2*pi;[x,y]=meshgrid(x);z=sin(y).*cos(x);分别使用mesh(x,y,z)、surf(x,y,z)、plot3(x,y,z),比较得到的图形异同2. 三维图形绘制(1)改进的三维绘图函数[x,y]=meshgrid(-8:0.5:8);z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps);% p=sqrt(x.^2+y.^2)+eps;z=sin(p)./p;subplot(2,2,1);meshc(x,y,z);title('meshc(x,y,z)')%等高线subplot(2,2,2);meshz(x,y,z);title('meshz(x,y,z)')%边界面subplot(2,2,3);surfc(x,y,z) %等高线title('surfc(x,y,z)')subplot(2,2,4);surfl(x,y,z)title('surfl(x,y,z)')%光照面(2)标准三维曲面球面sphere函数>> [x,y,z]=sphere(20);>> surf(x,y,z)三维柱面cylinder函数[x,y,z]=cylinder([0:0.2:4],20);surf(x,y,z)%圆锥>> t=0:pi/25:2*pi;>> R=sin(t);>> cylinder(R,20)(3)条形图、填充图、阶梯图和杆图形式的曲面绘制使用bar3、stem3、pie3和fill3函数1)绘制魔方阵的三维条形图。
matlab画立体蝴蝶的代码Matlab是一款强大的工具,可以帮助我们完成许多数据分析、数学建模和图像处理等工作。
在Matlab中,我们可以用简单的代码绘制出许多精美的图像,例如立体蝴蝶。
下面就来介绍一下如何使用Matlab绘制立体蝴蝶的代码。
1.准备工作我们需要在Matlab中打开一个新的文件,然后输入下面这句代码创建一个3D画布:figure('units','normalized','outerposition',[0 0 1 1])这句代码将创建一个全屏的3D画布,供我们后续用来绘制立体蝴蝶。
2.绘制蝴蝶的翅膀接下来,我们需要定义蝴蝶的两个翅膀,具体代码如下:t = 0:pi/10:2*pi;x = sin(t).*(exp(cos(t))-2*cos(4*t)-sin(t/12).^5);y = cos(t).*(exp(cos(t))-2*cos(4*t)-sin(t/12).^5);z = sin(t/2).^2.*cos(5*t+pi/2);plot3(x,y,z,'r','LineWidth',2)这段代码的意思是先设置一个参数t,然后用该参数计算出x、y、z坐标分别对应蝴蝶翅膀上的点的位置。
最后使用plot3函数将这些点连接起来,形成一个立体的蝴蝶翅膀。
这时我们已经完成了蝴蝶的一只翅膀的绘制。
接下来我们需要将另一只翅膀按照一定的规律旋转、平移后绘制出来。
代码如下:hold onfor i=1:3xx = x*cos(pi*i/3) + y*sin(pi*i/3) - 5*(cos(pi*i/3)+1)/2; yy = -x*sin(pi*i/3) + y*cos(pi*i/3);zz = z+2*i;plot3(xx,yy,zz,'r','LineWidth',2)end这段代码首先使用for循环来遍历翅膀的三个位置。
atlab 三维画图(2011-04-12 21:11:26) 转载▼标签: matlab 三维图分类: 课程学习今天被matlab 画三维图给整疯掉了,想通过三角形两边的变化求一边对角的变化函数图,但是matlab 中说这是complex ,无法画图,我就想限制值域,这样就是一对一的函数了,但是matlab 不知道怎么实现,网上查了查也没找到。
就先放一放再说吧。
不过过程中发现matlab 画出的图还是很强大且漂亮的。
附上两张: 1、mesh 函数[x, y]=meshgrid(-4:.2:4); R=sqrt(x.^2+y.^2); z=-cos(R); mesh(x,y,z)xlabel('x\in[-4,4]','fontweight','bold'); ylabel('y\in[-4,4]','fontweight','bold');zlabel('z=-cos(sqrt(x^2+y^2))','fontweight','bold');title('旋转曲面','fontsize',15,'fontweight','bold','fontname','隶书');二、meshc 函数其他不变,把上面代码中的mash 换成mashc ,得到的图如下,在网孔线下方绘制了轮廓线。
三、mashz函数Matlab 三维作图1 画一个可透视的椭球figurea = 15;b = 10;c = 5;k = 5;n = 2^k-1;theta = pi*(-n:2:n)/n;phi = (pi/2)*(-n:2:n)'/n;X = a*cos(phi)*cos(theta);Y = b*cos(phi)*sin(theta);Z = c*sin(phi)*ones(size(theta));surf(X,Y,Z,'FaceColor','interp',...'EdgeColor','none',...'FaceLighting','phong')axis tightcamlight leftalpha(.33) % 产生透视效果这是在7.1.上画的图:....................建立空间等高线[X,Y] = meshgrid([-2:.25:2]); Z = X.*exp(-X.^2-Y.^2);contour3(X,Y,Z,30)h = findobj('Type','patch');set(h,'LineWidth',2)title(' 空间等高线')..................§4.2 三维作图§4.2.1 mesh(Z)语句mesh(Z)语句可以给出矩阵Z元素的三维消隐图,网络表面由Z坐标点定义,与前面叙述的x-y平面的线格相同,图形由邻近的点连接而成.它可用来显示用其它方式难以输出的包含大量数据的大型矩阵,也可用来绘制Z变量函数.显示两变量的函数Z=f(x,y),第一步需产生特定的行和列的x-y矩阵.然后计算函数在各网格点上的值.最后用mesh函数输出.下面我们绘制sin(r)/r函数的图形.建立图形用以下方法:x=-8:.5:8;y=x';x=ones(size(y))*x;y=y*ones(size(y))';R=sqrt(x.^2+y.^2)+eps;z=sin(R)./R;mesh(z) %% 试运行mesh(x,y,z),看看与mesh(z)有什么不同之处?各语句的意义是:首先建立行向量x,列向量y;然后按向量的长度建立1-矩阵;用向量乘以产生的1-矩阵,生成网格矩阵,它们的值对应于x-y坐标平面;接下来计算各网格点的半径;最后计算函数值矩阵Z.用mesh函数即可以得到图形.图4.2.1三维消隐图第一条语句x的赋值为定义域,在其上估计函数;第三条语句建立一个重复行的x矩阵,第四条语句产生y的响应,第五条语句产生矩阵R(其元素为各网格点到原点的距离).用mesh方法结果如上.另外,上述命令系列中的前4行可用以下一条命令替代:[x, y]=meshgrid(-8:0.5:8)§4.2.2与mesh相关的几个函数(1) meshc与函数mesh的调用方式相同,只是该函数在mesh的基础上又增加了绘制相应等高线的功能.下面来看一个meshc的例子:[x,y]=meshgrid([-4:.5:4]);z=sqrt(x.^2+y.^2);meshc(z) %% 试运行meshc(x,y,z),看看与meshc(z)有什么不同之处?我们可以得到图形:图4.2.2.1 meshc图地面上的圆圈就是上面图形的等高线.(2)函数meshz与mesh的调用方式也相同,不同的是该函数在mesh函数的作用之上增加了屏蔽作用,即增加了边界面屏蔽.例如:[x,y]=meshgrid([-4:.5:4]);z=sqrt(x.^2+y.^2);meshz(z) %% 试运行meshz(x,y,z),看看与meshz(z)有什么不同之处?我们得到图形:图4.2.2.2 meshz图§4.2.3其它的几个三维绘图函数(1)在Matlab中有一个专门绘制圆球体的函数sphere,其调用格式如下:[x,y,z]=sphere(n)此函数生成三个(n+1)×(n+1)阶的矩阵,再利用函数surf(x,y,z)可生成单位球面.[x,y,z]=sphere 此形式使用了默认值n=20sphere(n) 只绘制球面图,不返回值.运行下面程序:sphere(30);axis square;我们得到球体图形:图4.2.3.1 球面图若只输入sphere画图,则是默认了n=20的情况.(2) surf函数也是Matlab中常用的三维绘图函数.其调用格式如下:surf(x,y,z,c)输入参数的设置与mesh相同,不同的是mesh函数绘制的是一网格图,而surf绘制的是着色的三维表面.Matlab语言对表面进行着色的方法是,在得到相应网格后,对每一网格依据该网格所代表的节点的色值(由变量c控制),来定义这一网格的颜色.若不输入c,则默认为c=z.我们看下面的例子:%绘制地球表面的气温分布示意图.[a,b,c]=sphere(40);t=abs(c); %求绝对值surf(a,b,c,t);axis equalcolormap('hot')我们可以得到图形如下:图4.2.3.2 等温线示意图§4.2.4图形的控制与修饰(1)坐标轴的控制函数axis,调用格式如下:axis([xmin,xmax,ymin,ymax,zmin,zmax])用此命令可以控制坐标轴的范围.与axis相关的几条常用命令还有:axis auto 自动模式,使得图形的坐标范围满足图中一切图元素axis equal 严格控制各坐标的分度使其相等axis square 使绘图区为正方形axis on 恢复对坐标轴的一切设置axis off 取消对坐标轴的一切设置axis manual 以当前的坐标限制图形的绘制(2)grid on 在图形中绘制坐标网格.grid off 取消坐标网格.(3)xlabel, ylabel, zlabel分别为x轴, y轴, z轴添加标注.title为图形添加标题.以上函数的调用格式大同小异,我们以xlabel为例进行介绍:xlabel('标注文本','属性1','属性值1','属性2','属性值2',…)这里的属性是标注文本的属性,包括字体大小、字体名、字体粗细等.例如:[x, y]=meshgrid(-4:.2:4);R=sqrt(x.^2+y.^2);z=-cos(R);mesh(x,y,z)xlabel('x\in[-4,4]','fontweight','bold');ylabel('y\in[-4,4]','fontweight','bold');zlabel('z=-cos(sqrt(x^2+y^2))','fontweight','bold');title('旋转曲面','fontsize',15,'fontweight','bold','fontname','隶书');图4.2.4.1添加标注。
附录附录一:程序1.城区各功能区的地形二维等高线污染浓度散点图分布图程序clcclearclose allD=load('坐标数据.dat');M=load('浓度含量shuju.dat');x=D(:,2);y=D(:,3);z=D(:,4);c=D(:,5);xi=linspace(min(x),max(x),300);yi=linspace(min(y),max(y),300);[xi,yi]=meshgrid(xi,yi);zi=griddata(x,y,z,xi,yi);ci=griddata(x,y,c,xi,yi);marker={'d','^','s','o','V'};color={'b','y','c','r','m'};mat={'As','Cd','Cr','Cu','Hg','Ni','Pb','Zn'};str={'等高线','生活区','工业区','山林区','交通区','绿地区'}; for j=1:8% 等高线图形figurecontourf(xi,yi,zi,0:10:500);% set(h,'ShowText','on','TextStep',get(h,'LevelStep')*2)% clabel(C,h,[0:10:50,50:50:300,300:100:500]);legend( '生活区','工业区','山林区','交通区','绿地区');%legend( {'k','r','y','c','b'});title(['重金属 ',mat{j}, ' 空间二维等高线分布图'])xlabel('X---轴')ylabel('Y---轴')colormap summercolorbargrid onhold onfor i=1:5loc=c==i;plot(x(loc),y(loc),marker{i},'markerfacecolor',color{i},'MarkerEdgeColor',color {i});end% legend(str,'location','best')for k=1:length(x)text(x(k)-200,y(k)+200,num2str(M(k,j+1)),'fontsize',8);endlegend( '功能一区——生活区','功能二区——工业区','功能三区——山林区','功能四区——交通区','功能五区——绿地区');end2.重金属‘**’含量程序clc; clear;load shuju1.txtA=shuju1;x=A(:,1);y=A(:,2);z=A(:,3);scatter(x,y,5,z)%散点图figure(1)[X,Y,Z]=griddata(x,y,z,linspace(min(x),max(x),200)',linspace(min(y),max(y), 200),'v4');%插值pcolor(X,Y,Z);shading interp%伪彩色图figure(2),contourf(X,Y,Z) %等高线图legend('污染程度分布');title('重金属As含量空间分布平面图')xlabel('x—轴'),ylabel('y—轴');%zlabel('z—轴')figure(3),surf(X,Y,Z)%三维曲面legend('污染程度分布');title('重金属As含量空间分布平面图')xlabel('x—轴'),ylabel('y—轴');zlabel('z—轴')3 重金属综合污染指数程序%Cd综合污染指数Grandvalue=190;maxvalue=0;sum=0;C=[352.60556.20113.70240.50120.30514.10246.30158.00211.30236.50]; % 可以输入任意长度的污染浓度数据C=C'n=length(C);for i=1:n;if C(i)>maxvaluemaxvalue= C(i);elsesum=sum+ C(i)/Grandvalue;endendp=sqrt(((sum/n)^2+(maxvalue/Grandvalue)^2)/2) 附录二:污染状况空间分布图。
附录
附录一:程序
1.城区各功能区的地形二维等高线污染浓度散点图分布图程序clc
clear
close all
D=load('坐标数据.dat');
M=load('浓度含量shuju.dat');
x=D(:,2);
y=D(:,3);
z=D(:,4);
c=D(:,5);
xi=linspace(min(x),max(x),300);
yi=linspace(min(y),max(y),300);
[xi,yi]=meshgrid(xi,yi);
zi=griddata(x,y,z,xi,yi);
ci=griddata(x,y,c,xi,yi);
marker={'d','^','s','o','V'};
color={'b','y','c','r','m'};
mat={'As','Cd','Cr','Cu','Hg','Ni','Pb','Zn'};
str={'等高线','生活区','工业区','山林区','交通区','绿地区'}; for j=1:8
% 等高线图形
figure
contourf(xi,yi,zi,0:10:500);
% set(h,'ShowText','on','TextStep',get(h,'LevelStep')*2)
% clabel(C,h,[0:10:50,50:50:300,300:100:500]);
legend( '生活区','工业区','山林区','交通区','绿地区');
%legend( {'k','r','y','c','b'});
title(['重金属 ',mat{j}, ' 空间二维等高线分布图'])
xlabel('X---轴')
ylabel('Y---轴')
colormap summer
colorbar
grid on
hold on
for i=1:5
loc=c==i;
plot(x(loc),y(loc),marker{i},'markerfacecolor',color{i},'MarkerEdgeColor',color {i});
end
% legend(str,'location','best')
for k=1:length(x)
text(x(k)-200,y(k)+200,num2str(M(k,j+1)),'fontsize',8);
end
legend( '功能一区——生活区','功能二区——工业区','功能三区——山林区','功能四区——交通区','功能五区——绿地区');
end
2.重金属‘**’含量程序
clc; clear;
load shuju1.txt
A=shuju1;
x=A(:,1);y=A(:,2);z=A(:,3);
scatter(x,y,5,z)%散点图
figure(1)
[X,Y,Z]=griddata(x,y,z,linspace(min(x),max(x),200)',linspace(min(y),max(y), 200),'v4');%插值
pcolor(X,Y,Z);
shading interp%伪彩色图
figure(2),contourf(X,Y,Z) %等高线图
legend('污染程度分布');
title('重金属As含量空间分布平面图')
xlabel('x—轴'),ylabel('y—轴');%zlabel('z—轴')
figure(3),surf(X,Y,Z)%三维曲面
legend('污染程度分布');
title('重金属As含量空间分布平面图')
xlabel('x—轴'),ylabel('y—轴');zlabel('z—轴')
3 重金属综合污染指数程序
%Cd综合污染指数
Grandvalue=190;
maxvalue=0;
sum=0;
C=[
352.60
556.20
113.70
240.50
120.30
514.10
246.30
158.00
211.30
236.50
]; % 可以输入任意长度的污染浓度数据
C=C'
n=length(C);
for i=1:n;
if C(i)>maxvalue
maxvalue= C(i);
else
sum=sum+ C(i)/Grandvalue;
end
end
p=sqrt(((sum/n)^2+(maxvalue/Grandvalue)^2)/2) 附录二:污染状况空间分布图。