当前位置:首页 > 图片 > 国际图片 > 正文
文章正文

matlab做三维动态图 MATLAB绘图篇

图片 > 国际图片 > :matlab做三维动态图 MATLAB绘图篇是由美文导刊网(www.eorder.net.cn)为您精心收集,如果觉得好,请把这篇文章复制到您的博客或告诉您的朋友,以下是matlab做三维动态图 MATLAB绘图篇的正文:

MATLAB绘图篇

图形绘制篇

1. 基本xy平面绘图命令

MATLAB不但擅长於矩阵相关的数值运算,也适合用在各种科学目视表示(Scientific visualization)。

本节将介绍MATLAB基本xy平面及xyz空间的各项绘图命令,包含一维曲线及二维曲面的绘制、列印及存档。

plot是绘制一维曲线的基本函数,但在使用此函数之前,我们需先定义曲线上每一点的x 及y座标。

下例可画出一条正弦曲线:

close all;

x=linspace(0, 2*pi, 100); % 100个点的x座标

y=sin(x); % 对应的y座标

plot(x,y);

小整理:MATLAB基本绘图函数

plot: x轴和y轴均为线性刻度(Linear scale)

loglog: x轴和y轴均为对数刻度(Logarithmic scale)

semilogx: x轴为对数刻度,y轴为线性刻度

semilogy: x轴为线性刻度,y轴为对数刻度

若要画出多条曲线,只需将座标对依次放入plot函数即可:

plot(x, sin(x), x, cos(x));

若要改变颜色,在座标对後面加上相关字串即可:

plot(x, sin(x), "c", x, cos(x), "g");

若要同时改变颜色及图线型态(Line style),也是在座标对後面加上相关字串即可:

plot(x, sin(x), "co", x, cos(x), "g*");

小整理:plot绘图函数的叁数字元颜色字元图线型态y 黄色。点k黑色o 圆w 白色x xb 蓝色+ +g 绿色* *r 红色- 实线c 亮青色: 点线m 锰紫色-. 点虚线-- 虚线

图形完成後,我们可用axis([xmin,xmax,ymin,ymax])函数来调整图轴的范围:

axis([0, 6, -1.2, 1.2]);

此外,MATLAB也可对图形加上各种注解与处理:

xlabel("Input Value"); % x轴注解

ylabel("Function Value"); % y轴注解

title("Two Trigonometric Functions"); % 图形标题

legend("y = sin(x)","y = cos(x)"); % 图形注解

grid on; % 显示格线

我们可用subplot来同时画出数个小图形於同一个视窗之中:

subplot(2,2,1); plot(x, sin(x));

subplot(2,2,2); plot(x, cos(x));

subplot(2,2,3); plot(x, sinh(x));

subplot(2,2,4); plot(x, cosh(x));

MATLAB还有其他各种二维绘图函数,以适合不同的应用,详见下表。

小整理:其他各种二维绘图函数

bar 长条图

errorbar 图形加上误差范围

fplot 较精确的函数图形

polar 极座标图

hist 累计图

rose 极座标累计图

stairs 阶梯图

stem 针状图

fill 实心图

feather 羽毛图

compass 罗盘图

quiver 向量场图

以下我们针对每个函数举例。

当资料点数量不多时,长条图是很适合的表示方式:

close all; % 关闭所有的图形视窗

x=1:10;

(matlab做三维动态图)

y=rand(size(x));

bar(x,y);

如果已知资料的误差量,就可用errorbar来表示。下例以单位标准差来做资的误差量:

x = linspace(0,2*pi,30);

y = sin(x);

e = std(y)*ones(size(x));

errorbar(x,y,e)

对於变化剧烈的函数,可用fplot来进行较精确的绘图,会对剧烈变化处进行较密集的取样,如下例:

fplot("sin(1/x)", [0.02 0.2]); % [0.02 0.2]是绘图范围

若要产生极座标图形,可用polar:

theta=linspace(0, 2*pi);

r=cos(4*theta);

polar(theta, r);

对於大量的资料,我们可用hist来显示资料的分 情况和统计特性。下面几个命令可用来验证randn产生的高斯乱数分 :

x=randn(5000, 1); % 产生5000个 m=0,s=1 的高斯乱数

hist(x,20); % 20代表长条的个数

rose和hist很接近,只不过是将资料大小视为角度,资料个数视为距离,并用极座标绘制

表示:

x=randn(1000, 1);

rose(x);

stairs可画出阶梯图:

x=linspace(0,10,50);

y=sin(x).*exp(-x/3);

stairs(x,y);

stems可产生针状图,常被用来绘制数位讯号:

x=linspace(0,10,50);

y=sin(x).*exp(-x/3);

stem(x,y);

stairs将资料点视为多边行顶点,并将此多边行涂上颜色:

x=linspace(0,10,50);

y=sin(x).*exp(-x/3);

fill(x,y,"b"); % "b"为蓝色

feather将每一个资料点视复数,并以箭号画出:

theta=linspace(0, 2*pi, 20);

z = cos(theta)+i*sin(theta);

feather(z);

compass和feather很接近,只是每个箭号的起点都在圆点:

theta=linspace(0, 2*pi, 20);

z = cos(theta)+i*sin(theta);

compass(z);

2.基本XYZ立体绘图命令

在科学目视表示(Scientific visualization)中,三度空间的立体图是一个非常重要的技巧。本章将介绍MATLAB基本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都是21x21的矩阵

zz=xx.*exp(-xx.^2-yy.^2); % 计算函数值,zz也是21x21的矩阵

mesh(xx, yy, zz); % 画出立体网状图

surf和mesh的用法类似:(matlab做三维动态图)

x=linspace(-2, 2, 25); % 在x轴上取25点

y=linspace(-2, 2, 25); % 在y轴上取25点

[xx,yy]=meshgrid(x, y); % xx和yy都是21x21的矩阵

zz=xx.*exp(-xx.^2-yy.^2); % 计算函数值,zz也是21x21的矩阵

surf(xx, yy, zz); % 画出立体曲面图

为了方便测试立体绘图,MATLAB提供了一个peaks函数,可产生一个凹凸有致的曲面,包含了三个局部极大点及三个局部极小点

要画出此函数的最快方法即是直接键入peaks:

peaks

z = 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);

axis([-inf inf -inf inf -inf inf]);

waterfall可在x方向或y方向产生水流效果:

[x,y,z]=peaks;

waterfall(x,y,z);

axis([-inf inf -inf inf -inf inf]);

下列命令产生在y方向的水流效果:

[x,y,z]=peaks;

waterfall(x",y",z");

axis([-inf inf -inf inf -inf inf]);

meshc同时画出网状图与等高线:

[x,y,z]=peaks;

meshc(x,y,z);

axis([-inf inf -inf inf -inf inf]);

surfc同时画出曲面图与等高线:

[x,y,z]=peaks;

surfc(x,y,z);

axis([-inf inf -inf inf -inf inf]);

contour3画出曲面在三度空间中的等高线:

contour3(peaks, 20);

axis([-inf inf -inf inf -inf inf]);

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. 三维网图的高级处理

3a. 消隐处理

例.比较网图消隐前后的图形

z=peaks(50);

subplot(2,1,1);

mesh(z);

title("消隐前的网图")

hidden off

subplot(2,1,2)

mesh(z);

title("消隐后的网图")(matlab做三维动态图)

hidden on

colormap([0 0 1])

3b. 裁剪处理

利用不定数NaN的特点,可以对网图进行裁剪处理

例.图形裁剪处理

P=peaks(30);

subplot(2,1,1);

(matlab做三维动态图)

mesh(P);

title("裁剪前的网图")

subplot(2,1,2);

P(20:23,9:15)=NaN*ones(4,7); %剪孔

meshz(P) %垂帘网线图

title("裁剪后的网图")

colormap([0 0 1]) %蓝色网线

(matlab做三维动态图)

4. 三维旋转体的绘制

为了一些专业用户可以更方便地绘制出三维旋转体,MATLAB专门提供了2个函数:柱面函数cylinder和球面函数sphere

(1) 柱面图

柱面图绘制由函数cylinder实现.

[X,Y,Z]=cylinder(R,N) 此函数以母线向量R生成单位柱面.母线向量R是在单位高度里等分刻度上定义的半径向量.N为旋转圆周上的分格线的条数.可以用surf(X,Y,Z)来表示此柱面.

[X,Y,Z]=cylinder(R)或[X,Y,Z]=cylinder此形式为默认N=20且R=[1 1]

例.柱面函数演示举例

x=0:pi/20:pi*3;

r=5+cos(x);

[a,b,c]=cylinder(r,30);

mesh(a,b,c)

例.旋转柱面图.

r=abs(exp(-0.25*t).*sin(t));

t=0:pi/12:3*pi;

r=abs(exp(-0.25*t).*sin(t));

[X,Y,Z]=cylinder(r,30);

mesh(X,Y,Z)

colormap([1 0 0])

(2) 球面图

球面图绘制由函数sphere来实现

[X,Y,Z]=sphere(N) 此函数生成3个(N+1)*(N+1)的矩阵,利用函数 surf(X,Y,Z) 可产生单位球面.

[X,Y,Z]=sphere 此形式使用了默认值N=20.

Sphere(N) 只是绘制了球面图而不返回任何值.

例.绘制地球表面的气温分布示意图.

[a,b,c]=sphere(40);

t=abs(c);

surf(a,b,c,t);

axis("equal") %此两句控制坐标轴的大小相同.

axis("square")

colormap("hot")

声明:本文转载自赵越微信公众平台

为方便研友们进行学术讨论,研之成理也开创了自己的QQ群,1号群:已满;2号群:已满;3号群:585629919。欢迎大家加入进行激烈的学术讨论!

本文版权属于研之成理,转载请通过QQ联系我们,未经许可请勿盗版,谢谢!

搜索微信号rationalscience,轻松关注我们,谢谢!返回搜狐,查看更多


一.求一个MATLAB三维动态图编程,

x=-5:0.5:5
y=0:1/3:10
[x,y]=meshgrid(x,y)
z=cos(x).*cos(y).*exp(-(sqrt(x.^2+y.^2)/4))
subplot(2,2,1) %网格图
mesh(x,y,z)
title('mesh(x,y,z)')
subplot(2,2,2) %曲面图
surf(x,y,z) <袱厂递断郛登店券锭猾br /> title('surf(x,y,z)')
subplot(2,2,3) %带等高线的三维网格曲面图
meshc(x,y,z)
title('meshc(x,y,z)')
subplot(2,2,4) % 带底座的三维网格曲面图
meshz(x,y,z)
title('meshz(x,y,z)')


二.matlab 动态三维图画法

用movie函数可以实现哈~给你个例子吧
给你个例子:
%影片生成例子: 旋转一个三维表面绘图
[X, Y, Z]=peaks(50); %创建山峰图形数据
surfl(X, Y, Z) %绘制带光照的表面
axis([-10 10 -10 10 -10 10]) %限制绘图范围
axis vis3d off %三维坐标修正,关闭坐标轴箭头
axis equal %等比例显示三维坐标
shading interp %加个影子美化
colormap(copper) %着色为铜色
for i=1:360 %旋转山峰,从1到360度,每一度捕捉一帧
view(-37.5+i,30) %从水平-37.5+i度,垂直30度的方害花愤拘莅饺缝邪俯矛向看山峰
m(i)=getframe; %每从一个角度看到一张图像(帧),就存储到m
end %每次看完,水平转动1度,直到1周360度;
cla %为播放影片清除坐标
movie(m) %把刚才存到m里的图像连续播放一遍,就是影片了.


三.如何用matlab画一个动态图?

No.1
给你一个示例吧~~~用for循环做的
%动态绘制椭圆
clf;axis([-2,2,-2,2]);
axis equal;
pause(1);
h=line(NaN,NaN,'marker','o','linesty','-','erasemode','none');
t=6*pi*(0:0.02:1);
for n=1:length(t)
set(h,'xdata',2*cos(t(1:n)),'ydata',sin(t(1:n)));
pause(0.05);%暂停0.05秒
end

No.2
貌似函数comet,comet3可以实现质点动画
%comet(xdata,ydata,p) p为彗星尾巴长度,可为常数
%平抛运动
vx=40;
t=linspace(0,10,1000);
x=vx*t;
y=-9.8*t.^2/2;
comet(x,y)

No.3最强大的也就是动画制作了,这个有点难,需要用到函数movie
相关链接http饥鸡观课攥酒硅旬亥莫:/...8.html


四.matlab 旋转已做好的三维图,生成gif动画

楼主所说的“不成功”是什么概念?
是不能生成GIF文件,还是说生成的文件播放有问题?
据我在多个版本实测,生成文件是没问题的,但播放文件时,后面的一些帧会出现混乱。

应该是格式兼容性问题:
在最新版的MATLAB 2014a读入生成的文件,然后逐帧显示,图像是对的;但在2008a中读入文件时会出错。
把生成的文件用Ulead GIF Animator 5.05打开,可以查看各帧的图像都是正常的,另存一下就好了。
我想不出更好的解决办法。代码看上去没什么问题,图像的数据其实也都保存下来了,如果说有问题,就是因为MATLAB对多帧GIF格式的支持还不够好。

猜测可能与各帧的colormap不同有关,但没有更深入的分氦骸份缴莓剂逢烯抚楼析。



五.如何用MATLAB绘制随时间变化的动态三维散点图?

% 生成测试数据,每列是一个时刻的数据
x = randn(1000, 500);
y = randn(1000, 500);
z = randn(1000, 500);

% 下面这句比较重要——避免闪烁
set(gcf, 'doublebuffer', 'on')
for i = 1 : size(x,2)
plot3(x(:,i), y(:,i), z(:,i), '.') % 下面又是一句比较关键的——更新绘图
drawnow
end


六.如何用matlab画一个动态图?

No.1
给你一个示例吧~涪鸡帝课郜酒佃旬顶莫~~用for循环做的
%动态绘制椭圆
clf;axis([-2,2,-2,2]);
axis equal;
pause(1);
h=line(NaN,NaN,'marker','o','linesty','-','erasemode','none');
t=6*pi*(0:0.02:1);
for n=1:length(t)

set(h,'xdata',2*cos(t(1:n)),'ydata',sin(t(1:n)));

pause(0.05);%暂停0.05秒
end

No.2
貌似函数comet,comet3可以实现质点动画
%comet(xdata,ydata,p) p为彗星尾巴长度,可为常数
%平抛运动
vx=40;
t=linspace(0,10,1000);
x=vx*t;
y=-9.8*t.^2/2;
comet(x,y)

No.3最强大的也就是动画制作了,这个有点难,需要用到函数movie
相关链接 blog.sina.com.cn/s/blog_61c0518f0100erw8.html

给你举个例子吧
R=3;r=1;u=linspace(0,7*pi/4);v=linspace(0,2*pi);[u,v]=meshgrid(u,v);x=(R+r*cos(v).*sin(u*4/7)).*cos(u);y=(R+r*cos(v).*sin(u*4/7)).*sin(u);z=r*sin(v).*sin(u*4/7);%figure('renderer','zbuffer');%2014b以前版本加上这句,之后的版本注释掉h=mesh(x,y,z,z);set(h,'EdgeColor','none')axis equal vis3d offview(2)hold on[X,Y,Z]=meshgrid(linspace(-4,4));for n=0:15:345 h=contourslice(X,Y,Z,sin(X+Y+Z+n/180*pi),x,y,z,25); drawnow; f=getframe(gcf); A=frame2im(f); [A,cmap]=rgb2ind(A,256); if n==0 imwrite(A,cmap,'moon2.gif','gif','LoopCount',inf,'DelayTime',.1); else imwrite(A,cmap,'moon2.gif','gif','Write涪鸡帝课郜酒佃旬顶莫Mode','append','DelayTime',.1); end delete(h);endclose gcf!moon2.gif



七.matlab做三维曲面图 求大神 给代码 并做张图让我看看 我用的是matlab7

“墨西哥帽子”:由函数z=sin(r)/r确定曲面,其中r.^2=x.^2+y.^2 (-a<x<a,-a<y<a)
>>x=[-8:0.5:8];
>>y=[-8:0.5:8];
>>[X,Y]=meshgrid(x,y);
>>r=sqrt(X.^2+Y.^2);
>>Z=sin(r)沪恭高枷薨磺胳委供莲./r;
>>mesh(X,Y,Z)

或者
>>x=[-8:0.5:8];
>>y=[-8:0.5:8];
>>[X,Y]=meshgrid(-8:0.5:8);
>>r=sqrt(X.^2+Y.^2);
>>Z=sin(r)./r;
>>surf(X,Y,Z)

mesh绘制网格图,surf绘制着色的三维表面图


八.怎么把这个MATLAB程序的动态图形保存为gif啊,求助!

clearclc%飞机追踪潜艇航线图t=linspace(0,1,2000); flag=0;p=zeros(2000,2);q=ones(2000,2);a=zeros(8,2);b=zeros(8,2);a(:,1)=0;a(1,2)=6;b(1,2)=0;b(1,1)=pi/2;for i=1:2000 theta=sqrt(3)*log(10*t(i)+1); p(i,1)=2*exp(sqrt(3)/3*theta); p(i,2)=theta;%飞机的极坐标 q(i,1)=2+20*t(i); q(i,2)=pi/2;%潜艇的极坐标 if abs(p(i,1)-q(i,1))<0.01&&abs(p(i,2)-q(i,2))<0.01%判断飞机是否已经找到潜艇 flag=1; break; endend if flag==1%判断飞机是否找到潜艇 disp('已经找到该轨迹!'); h = polar([0 2*pi], [-6 0],'k.'); text(2,0,'(2,0)');text(6,0,'A(6,0)'); text(0,2,'(0,2)');text(0,0,'(0,0)'); title('飞机追踪潜艇轨迹图'); hold on; n=1; im=frame2im(getframe); [imind,cm]=rgb2ind(im,256); imwrite(imind,cm,'追踪轨迹图.GIF','gif','Loopcount',inf,'DelayTime',0.1); for j=2:i a(j,2)=a(j-1,2)-4/i;b(j,2)=b(j-1,2)+2/i;b(j,1)=pi/2; end for j=1:i polar(a(j,1),a(j,2),'r*'); polar(b(j,1),b(j,2),'b*'); for k=1:8 if j==fix(k*i/8) n=n+1; im=frame2im(getframe); [imind,cm]=rgb2ind(im,256); imwrite(imind,cm,'追踪轨迹图.GIF','gif','WriteMode','append','DelayTime',0.1); end end end for j=1:i polar(p(j,2),p(j,1),'r*'); polar(q(j,2),q(j,1),'b*'); for k=1:8 if j==fix(k*i/8) ......余下全文>>

matlab做三维动态图 MATLAB绘图篇由美文导刊网(www.eorder.net.cn)收集整理,转载请注明出处!原文地址http://www.eorder.net.cn/pic37436/

文章评论
Copyright © 2006 - 2016 www.eorder.net.cn All Rights Reserved
美文导刊网 版权所有