本周文件交换选择

我们最好的用户反馈

实时脚本中的动画回放控制(R2021a)

我选择这个动画例子来突出我最喜欢的R2021a的新功能之一, 实时脚本中的动画回放控件 .这个版本有许多很棒的新特性,如果您没有仔细阅读 发布说明
在现在的一些版本中,实时脚本中的动画已经成为可能。使用R2021a,您现在可以在不重新运行代码的情况下回放动画。你可以在情节下面获得一个播放控件,可以改变播放速度。
让我们用来自 MATLAB绘图画廊-动画
animation_playback.gif

动画代码(改编自MATLAB绘图画廊-动画

下面是动画的代码。看看这些评论吧;您会注意到我修改了一些代码来使用额外的新特性。
参数和初始条件
%质量,链接长度,初始角度,模拟时间
M = 1;
L = 1;
1 = 3* /4;
2 = 3* /8;
T = linspace(0,10,200);
求解双摆的ODE
[T、Y] =数值(@ (T, x) double_pendulum (T, x, m, L),...
T, [theta1, theta2, 0,0]);
为动画目的计算关节坐标
x = [L*sin(Y(:,1)), L*sin(Y(:,1))+L*sin(Y(:,2))];
y = [- l * cos (y (: 1)), - l * cos (y (: 1)) - l * cos (y (:, 2)));
将弧度转换为角度
ang = Y(:,1:2)*180/pi;
tiledlayout (2, 1)R2019b引入
nexttileR2019b引入
情节(T, ang,线宽= 2)R2021a引入% Name=value语法!!
持有
hh1(1) = plot(T(1),ang(1,1),Marker=“。”MarkerSize = 20,颜色=“b”);
hh1(2) = plot(T(1),ang(1,2),Marker=“。”MarkerSize = 20,颜色=“r”);
包含(“时间(sec)”
ylabel (“角(度)
持有
nexttile
hh2 =情节([0,x (1,1); x (1, 1), x(1、2)]、[0,y (1,1); y (1, 1), y(1、2),...
标志=“。”MarkerSize = 20,线宽= 2);
平等的
轴([-2*L 2*L -2*L 2*L])
Ht =标题(“:”+ T (1) +“秒”);R2016b中引入的字符串数组
id = 1:长度
集(hh1 (1) XData = T (id), YData =盎(id, 1))
集(hh1 (2) XData = T (id), YData =盎(id、2))
集(hh2 (1) XData = [0, x (id, 1)]、YData = (0 y (id, 1)))
集(hh2 (2), XData = x (id,:), YData = y (id,:))
集(ht,字符串=“:”+ + T (id)“秒”
drawnow
结束
注意,我还使用了new 名称=值 可选参数的语法。

现在就在浏览器中运行

您知道博客中还有一个新功能,可以在浏览器中运行代码吗?点击 “在浏览器中运行” 按钮,您将在MATLAB的在线版本中看到这篇博客文章的实时脚本。运行代码,在它运行完成后,您应该会看到动画回放控件。
现在试试吧,让我们知道你的想法 在这里

动画的辅助函数

函数dy = double_pendulum(t, y, m, L)
双摆(质量m,连杆长度L)的ode系统
%差异见http://en.wikipedia.org/wiki/Double_pendulum
%方程
版权所有The MathWorks, Inc.
G = 9.81;
Theta1 = y(1);%角度1
Theta2 = y(2);%角度2
P1 = y(3);%的势头
P2 = y(4);%的势头
%导数
dy (1) = 6 / (m * L ^ 2) * (2 * * cos (theta1-theta2) *约至4 - p2) /...
(拿下* cos (theta1-theta2) ^ 2);
dy (2) = 6 / (m * L ^ 2) * (8 * p2-3 * cos (theta1-theta2) * p1) /...
(拿下* cos (theta1-theta2) ^ 2);
dy (3) = 1/2 * m * L ^ 2 * (dy (1) * dy (2) * sin (theta1-theta2) + 3 * g / L * sin(θ₁));
dy (4) = 1/2 * m * L ^ 2 * (dy (1) * dy (2) * sin (theta1-theta2) + g / L * sin(θ));
Dy = Dy (:);
结束
|

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。