MATLAB总结Word格式文档下载.docx
- 文档编号:3242114
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:26
- 大小:33.69KB
MATLAB总结Word格式文档下载.docx
《MATLAB总结Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《MATLAB总结Word格式文档下载.docx(26页珍藏版)》请在冰点文库上搜索。
*A
B=
1014
1420
我们看sqrt()与矩阵点乘(点乘方)之间的关系:
C=sqrt(B)
C=
3.16233.7417
3.74174.4721
R5=C.*C
R5=
R6=C.^2
R6=
即sqrt()得到的结果与点乘有关。
与矩阵乘法(乘方)有关的命令是sqrtm().
D=sqrtm(B)
D=
2.0582.401
2.4013.773
D*D
ans=
D^2
接下来讲的就是^.5,.^.5与sqrt(),sqrtm()的关系了。
他们的对应关系很简单,看下列代码就明白了。
sqrt(C)
1.77831.9343
1.93432.1147
C.^.5
sqrtm(C)
1.2221.2919
1.29191.6743
C^.5
%%%%%%%%%%%---------------------------------
按钮创建
一、
比如创建一个打开的按钮:
uicontrol('
string'
'
打开'
)即可
二、
str='
<
html>
按钮文字<
br>
多行显示<
/html>
'
;
uicontrol('
Style'
'
pushbutton'
Units'
normalized'
FontSize'
12,'
position'
[0.40.40.30.2],'
str);
三、
hf=figure('
Color'
[0.55,0.658,0.257],'
Position'
[100,200,400,200],...
Name'
图片'
NumberTitle'
off'
MenuBar'
none'
);
set(gcf,'
outerposition'
get(0,'
screensize'
));
h_pause=uicontrol(hf,'
style'
[100258030],'
pause'
callback'
uiwait(hf)'
h_goon=uicontrol(hf,'
[300258030],'
goon'
uiresume(hf)'
fori=45:
53%45到53是图片名字
k=imread([num2str(i),'
.jpg'
]);
imagesc(k);
pause
(1);
drawnow;
end
%%%%%%%%%%%%%%%%---------------------------------
保存图片的方法
1、可以用print命令保存:
print(1,'
-djpeg'
picname.jpeg'
)
注:
第一个参数表示图形窗口的句柄号;
第二个参数,在引号内表示保存为jpeg格式,第三个参数为文件名。
2、可以用saveas命令保存:
saveas(gcf,'
picname'
jpg'
第一个参数是matlab获取图形句柄号的函数名,第二个参数,在引号内是希望保存的文件名,这里不要写后缀,第三个参数是文件类型。
3、FG=getframe(gcf);
imwrite(FG.cdata,'
FG.jpg'
4、对于画图循环体,加这句应该就能保存了,k为保存的第几幅图。
saveas(gcf,['
D:
\MATLAB7\work'
yanbao'
num2str(k),'
%%%%%%%%%%%%-------------------------------------
一、动画制作方法
Matlab提供了许多与动画制作相关的函数,能够比较容易完成动画的制作。
(一)时间函数
1.Timer函数可以使用Timer函数创建计时器对象,如:
当前目录中的程序名称,其程序见下一页。
mytimer=timer('
TimerFcn'
fPatch'
StartDelay'
6);
start(mytimer)关键词程序运行后,6秒钟后才执行程序fPatch.m。
用start()函数激活计数器对象,6秒钟后才执行程序fPatch.m。
程序:
fpatch.m功能:
使用patch函数绘制正方体网格图与表面图。
vert=[111;
121;
221;
211;
112;
122;
222;
212];
fac=[1234;
2673;
4378;
1584;
1265;
5678];
subplot(1,3,1)patch('
faces'
fac,'
vertices'
vert,'
FaceColor'
w'
view(3);
subplot(1,3,2)patch('
FaceVertexCData'
hsv(6),'
flat'
subplot(1,3,3)patch('
hsv(8),'
interp'
正方体网格图
各面着色正方体
插值着色正方体
一个计时器中可以同时对多个M文件进行不同的定时操作。
如:
Mtimer=timer('
file1'
StartFcn'
file2'
StopFcn'
file3'
ErrorFcn'
file4'
该计时器对象执行如下操作:
?
将'
作为基本计时器代码执行;
当使用start函数启动计时器时执行'
;
当使用stop函数终止计时器时执行'
出错时执行'
。
2.当前日期与时间使用clock函数可以返回当前时间。
>
clockans=1.0e+0032.00600.00900.01900.0200.03100.0384当前机器时间是2006年9月19日20点31分38.4秒。
使用now函数将返回当天的日期值。
formatlong;
nowans=7.336418131145024e+005这个时间的单位是天,转换成普通日期是2008年8月21日19点30分53秒左右(误差小于1分钟)。
使用datestr()函数可以将now函数返回的日期值转换成日期字符串。
datestr(7.336418131145024e+005)ans=21-Aug-200819:
30:
53
使用date函数可以返回dd-mmm-yy格式的当天日期。
dateans=21-Aug-2008使用datenum()函数可以将日期字符串变成日期值>
datenum(2008,8,21)ans=733641
3.计时函数函数cputime计算自当前Matlab程序启动之后到运行结束所占用的CPU时间(单位是秒)。
t0=cputime;
fpatch;
cputime-t0ans=0.0156程序fpatch.m的运行时间是0.0156秒。
函数etime计算两个时间向量的间隔。
t1=clock;
etime(clock,t1)ans=0.0150程序fpatch.m的运行时间是0.0150秒。
之所以比前面语句的计算时间少,是由于该程序已从硬盘装入等原因
计算运行时间的函数还有tic函数与toc函数,前者启动一个秒表,表示计时开始;
后者则停止这个秒表,并且计算运行时间。
tic;
plot(rand(50,5));
tocElapsedtimeis0.147644seconds.
4.pause函数函数pause()函数是延迟等待函数,例如,程序中如果出现pause(5),那么在执行到这句话的时候,停留5秒,然后继续。
例使用pause函数制作动画。
fori=-2*pi:
0.5:
2*piR=[cos(i)sin(i)0;
-sin(i)cos(i)0;
001];
vert=vert*R;
pause(0.1)patch('
view(3)end
程序是先绘制一个长方体,然后隔0.1秒又绘制出另外一个长方体,新长方体的顶点坐标经过了变换,此变换是乘以矩阵R完成的,该矩阵是绕Z轴旋转矩阵。
如此下去,绘制出下一页所示的图形,从而完成了此动画。
如果没有pause(0.1),那么就直接绘制出上图,没有了动画效果。
如果把R=[cos(i)sin(i)0;
变换成R=[cos(i)0sin(i);
010;
-sin(i)0cos(i)];
那么就是绕Y轴旋转。
(二)相机与视点
相机与视点的概念与动画制作密切相关。
1.函数函数camdolly()()surf(peaks)fori=0:
0.05:
0.5camdolly(i,0,0)pause(0.2)endcamdolly(0,i,0)camdolly(0,i,0,'
fixtarget'
)只移动相机,物体不移动用来移动相机位置和目标位置表示左右移动i个单位,i为正则向左,为负则向右。
camdolly函数的第3个参数表示沿视轴移动。
上下移动i个单位
2.函数函数camorbit()与camroll()()与()()函数camorbit(d1,d2)根据d1与d2的大小(单位是度)绕相机目标点旋转相机,d1表示水平旋转角度,d2表示垂直旋转角度。
surf(peaks)axisofffori=1:
36camorbit(10,0,'
data'
[010])pause(0.2)end函数camroll操纵相机绕视轴旋转a)camroll(d)按照d指定的大小绕相机视轴旋转相机,视轴由经过相机位置和相机目标点的直线确定。
b)camroll(h,d)操作由第一个句柄参数h确定的坐标系。
3.函数函数campan()()函数campan(dt,dp)按照dt和dp的大小绕相机旋转目标点,dt是水平旋转角度,dp是垂直旋转角度。
surf(peaks)axisvis3dfori=1:
720campan(2,0)pause(0.01)end该程序绕相机位置水平旋转了720×
2=1440度,即4圈,转完后又回到原先位置,一共停留时间720×
0.01=7.2秒。
函数campan还可以添加一个或两个参数campan(dt,dp,'
s1'
s2'
)参数s1用来确定旋转中心,参数s2用来确定旋转轴。
该函数还可以在第一个参数位置上加入坐标系句柄,决定操作哪一个坐标系,默认是操作当前坐标系。
4.函数函数campos()()该函数设置或查询相机的位置,其调用格式如下:
camposcampos([x,y,z])返回相机在当前坐标系中的位置将相机位置设置为当前坐标系中(x,y,z)处该程序使相机沿x轴方向运动。
axisvis3doff是取消了三维视觉功能,取消三维视觉功能后不论是campos([x,0,0]),还是campos([0,y,0]),或是campos([x,y,z])效果都是垂直屏幕表面运动,可以更清晰的观察运动的情况。
surf(peaks)axisvis3doffforx=-200:
10:
200campos([x,0,0])drawnowend
为了验证campos函数不带参数时的功能,设计如下程序:
a1=campossurf(peaks)a2=camposaxisvis3doffa3=camposforx=-200:
200campos([x,0,0])drawnowenda4=campos该程序中设置了4个campos,返回了相机的4个位置,分别是:
a1=0.50000.50009.1603a2=-203.2855-327.009086.6025a3=-194.1541-317.728683.9027a4=20000
其中a1的值是相机默认位置,a4是程序运行完成后的相机位置。
5.函数函数camtarget()()该函数设置或查询相机目标点的位置,调用格式为:
camtargetcamtarget([x,y,z])返回相机目标点在当前坐标系中的位置将相机目标点位置设置为当前坐标系中(x,y,z)处
surf(peaks)fori=1:
100camtarget([i,0,0])pause(0.01)end改为camtarget([0,i,0])改为camtarget([0,0,i])
该程序使相机目标点(物体)沿x轴移动。
沿y轴移动沿z轴移动
6.函数函数camva()与camzoom()()与()()函数camva()的调用格式是:
camvacamva(a)返回当前坐标系设置的相机视角将当前坐标系的相机视角设置为a,单位是度
下面程序制作了两个按钮用来控制视角的改变。
String'
In'
……'
[20206020],'
Callback'
ifcamva<
=1;
return;
else;
camva(camva-1);
end'
Out'
[100206020],'
ifcamva>
=179;
camva(camva+1);
设置相机新的视角函数camzoom()的调用格式是:
camzoom(f)
返回相机视角
根据f的值对场景进行缩放。
7.函数函数view()()
视角函数
该函数指定视点方向,其调用格式为:
view(az,el)和view([az,el])view
(2)view(3)设置三维图的视角。
方位角az为从y轴的负轴开始绕z轴水平旋转的角度。
正值表示视点逆时针旋转。
el为仰角。
az与el的单位为度。
设置为默认二维视图,az=0,el=90设置为默认三维视图,az=-37.5,el=30
例使用函数view()从不同角度观察图形。
[X,Y]=meshgrid(-10:
10);
Z=X.^2/36-Y.^2/25+sin(X+Y)*2;
x=X(1,:
y=Y(:
1);
i=find(y>
0.1&
y<
3.2);
j=find(x>
-3.6&
x<
3.5);
Z(i,j)=nan;
subplot(2,2,1);
surf(X,Y,Z);
xlabel('
x'
),ylabel('
y'
),zlabel('
z'
subplot(2,2,2);
view(-30,60);
subplot(2,2,3);
view
(2);
subplot(2,2,4);
view(30,-60);
上述程序运行后结果如下图所示,4个图形分别是不同视角下显示的同一个曲面。
(三)程序动画与电影动画
1.程序动画从计算机图形学上看,动画就是绘制的图形发生变化。
这个变化不能太快,也不能太慢,要被人的视觉接受。
在程序执行时,能够使图形变化达到视觉要求。
例程序动画制作。
下面程序就完成了一个动画。
1:
Z=X.^2/36-Y.^2/25;
h=mesh(Z)fori=1:
360rotate(h,[20,3,56],i)pause(0.1)end
程序中rotate函数是Matlab提供的一个图形变换函数。
函数rotate(h,[20,3,56],i)中,h是图形句柄,表示Mesh(Z)绘制的图形;
[20,3,56]决定了旋转轴方向;
i表示旋转角度,单位是度。
程序运行后,观看到的效果是一个面片在飞舞。
为了更好的观察面片的变化情况,改动上面程序为:
fori=1:
6subplot(2,3,i)[X,Y]=meshgrid(-10:
h=mesh(Z)rotate(h,[20,3,56],i*55)axistightoffpause(0.1)end
绘制出的动画效果比较好,为了仔细观察,下图截取了动画的一些中间图形。
这些图形是旋转时一些变化瞬间的图形。
面片是一样的,只不过是旋转过程中看到的各个不同侧面而已。
程序动画很多时候借助pause函数来完成。
2.绘制图形制作电影动画Matlab提供了动画制作函数movie,使用movie函数生成动画就称为电影动画。
生成动画必须有很多帧图形连续播放,如果这些图形是绘制而成的,就叫这种动画为绘制图形的电影动画。
例播放一个不断变化的眼球程序段。
M=moviein(16);
forj=1:
16plot(fft(eye(j+16)));
axisequalM(:
j)=getframe;
pause(0.1)endmovie(M,5)程序中使用了moviein函数创建一个结构体数组,专门用来装载动画的各帧;
使用getframe函数(命令)把绘制出的图形装入结构体。
其中,绘制每一帧图形之前,先使用了FFT变换函数。
程序最后一句是播放函数,以每秒5幅的速度播放画面。
getframe函数函数getframe函数可将当前图形窗口作为一个画面取下并保存,格式为:
m=getframe。
它将每一帧画面信息数据截取下来整理成列向量。
该函数截取图形的点阵信息,图形窗口的大小,对数据向量的大小影响较大,窗口越大,所需存储容量越大。
而图形的复杂性对数据容量要求没有直接的关系。
moviein函数函数函数m=moviein(n)用来建立一个足够大的n列的矩阵m,用来保存n幅画面的数据,以备播放。
movie函数函数movie(m,k)以每秒k幅图形的速度播放由矩阵m的列向量所组成的画面。
改动前面的程序如下,能够制作出新的动画。
16sphere(j);
endmovie(M,10)右边程序可以观察到一个椭圆转化成矩形的过程。
左边程序演示一个球体从多面体演化来的过程。
forj=16:
-1:
1rectangle('
[4,5,15,10],'
Curvature'
j/16);
M(:
axisequalendmovie(M,2)
3.基于图像制作电影动画动画效果是由于一幅幅图形变化产生的,如果这些图形来自于图像,那么就称该动画为基于图像的动画。
下列3个图象是用画图工具绘制出来的,分别命名为1.jpg、2.jpg与3.jpg,存储在D盘根目录下。
(a)1.jpg
(b)2.jpg
(c)3.jpg
制作动画的三幅图像
下面程序使用getframe函数装载上述几幅图像,使用movie函数播放这几幅图像就是一个动画。
3k=int2str(i);
k1=strcat('
d:
\'
k,'
a1=imread(k1);
image(a1);
m(:
i)=getframeendmovie(m,10)
4.几个例题例下述程序播放一个直径不断变化的球体。
n=30[x,y,z]=spherem=moviein(n);
nsurf(j*x,j*y,j*z)m(:
endmovie(m,30);
例三维图形
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 总结