matlab使用教程(59)—存储动画并播放

1.录制动画用于播放

        这些示例演示如何录制可播放的动画。

1.1录制和播放影片

        在循环中创建绘图系列并将每个绘图捕获为一帧。通过每次在循环中进行设置确保坐标轴范围为常量。将帧存储到 M 中。
for k = 1:16
plot(fft(eye(k+16)))
axis([-1 1 -1 1])
M(k) = getframe;
end

        使用 movie 函数播放影片。
figure
movie(M,5)

1.2为影片捕获整个图窗

        在图窗中创建一个彩色面板,并在创建绘图之前将坐标区放在该面板中。通过将当前图窗 (gcf) 指定为getframe 函数的输入参数捕获整个图窗窗口。
f = figure;
p = uipanel(f,"Position",[0.1 0.1 0.8 0.8],...
 "BackgroundColor","w");
ax = axes(p);
for k = 1:16
 plot(fft(eye(k+16)))
 axis([-1 1 -1 1])
 u.Value = k;
 M(k) = getframe(gcf);
end

        创建一个新的图窗和坐标区来填充图窗窗口,从而让影片看上去像原始动画。
figure
axes("Position",[0 0 1 1])
movie(M,5)

2.为曲面添加动画效果

        此示例说明如何对曲面进行动画处理。具体而言,此示例是对球谐函数进行动画处理。球谐函数是傅里叶级数的球面版本,可用于构建地球自由振动的模型。

2.1 定义球面网格

        定义球面网格上的一组点以计算谐波。
theta = 0:pi/40:pi;
phi = 0:pi/20:2*pi;
[phi,theta] = meshgrid(phi,theta);

2.2 计算球谐函数

        在半径为 5 的球面上计算一个次数为 6、阶数为 1、幅值为 0.5 的球谐函数。然后,将值转换为笛卡尔坐 标。
degree = 6;
order = 1;
amplitude = 0.5;
radius = 5;
Ymn = legendre(degree,cos(theta(:,1)));
Ymn = Ymn(order+1,:)';
yy = Ymn;
for kk = 2: size(theta,1)
yy = [yy Ymn];
end
yy = yy.*cos(order*phi);
order = max(max(abs(yy)));
rho = radius + amplitude*yy/order;
r = rho.*sin(theta);
x = r.*cos(phi);
y = r.*sin(phi);
z = rho.*cos(theta);

2.3 在球面上绘制球谐函数

        使用 surf 函数在球面上绘制球谐函数。
figure
s = surf(x,y,z);
light
lighting gouraud
axis equal off
view(40,30)
camzoom(1.5)

2.4 为曲面添加动画效果

        若要为曲面添加动画效果,请使用 for 循环更改绘图中的数据。若要替换曲面数据,请将曲面的 XDataYData ZData 属性设置为新值。若要控制动画的速度,请在更新曲面数据后使用 pause
scale = [linspace(0,1,20) linspace(1,-1,40)];
for ii = 1:length(scale)
rho = radius + scale(ii)*amplitude*yy/order;
r = rho.*sin(theta);
x = r.*cos(phi);
y = r.*sin(phi);
z = rho.*cos(theta);
s.XData = x;
s.YData = y;
s.ZData = z;
pause(0.05)
end

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

配电网和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值