公告:本站正式转型为非交互式静态网站!
转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997
联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。
感谢:最后非常感谢大家多年来的支持与帮助!
参考《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

0 投票
1.7k 浏览

我用Manipulate写了一段代码,描述一个小球的运动轨迹。其中设置了11个参数,有10个参数和轨迹相关,还有一个参数来表示小球在各个时刻的位置,即t。现在我想输出一个GIF动画,只改变参数t。请问该怎么写。

代码(针对 @最新回答 的问题1已经行修改)

Manipulate[\[Beta] = 0.0000; \[Gamma] = -0.000000;
j = x m a^2;
g = 10;
h = 0.01;
\[Mu] = 0.15;
v1 = (v0x + v0y I);
z1 = (z0x + z0y I);
\[Lambda]1 = 
1/(2 (j + a^2 m)) (I a \[Alpha] m + j \[CapitalOmega] - 
Sqrt[-4 I a (j + 
a^2 m) \[Alpha] m \[CapitalOmega] + (-I a \[Alpha] m - 
j \[CapitalOmega])^2]);
\[Lambda]2 = 
1/(2 (j + a^2 m)) (I a \[Alpha] m + j \[CapitalOmega] + 
Sqrt[-4 I a (j + 
a^2 m) \[Alpha] m \[CapitalOmega] + (-I a \[Alpha] m - 
j \[CapitalOmega])^2]);
c = (v1 - (z1*I)*\[Lambda]2)/(I*(\[Lambda]1 - \[Lambda]2));
d = (v1 - (z1*I)*\[Lambda]1)/(I*(\[Lambda]2 - \[Lambda]1));
z = c*Exp[I \[Lambda]1 t] + d*Exp[I \[Lambda]2 t];
vv1 = Re[D[z, t]];
vv2 = Im[D[z, t]];
vv = Sqrt[vv1^(2) + vv2^(2)];
aa1 = Re[D[D[z, t], t]];
aa2 = Im[D[D[z, t], t]];
aa = Sqrt[aa1^2 + aa2^2];
W = 1/2 (m vv^2 + j ((Abs[z]*\[CapitalOmega])/a)^2);
Show[ListPlot[
Table[{Re[z] + 0.5 g t^2 \[Beta], Im[z] + 0.5 g t^2 \[Gamma]}, {t, 
0, tmax, h}], AspectRatio -> Automatic, Joined -> True, 
ImageSize -> {300, 300}, PlotLabel -> Style["小球轨迹", 30], 
AxesLabel -> {"x/m", "y/m"}, 
PlotRange -> {{-0.3, 0.3}, {-0.3, 0.3}}], 
Graphics[Disk[{Re[z] /. t -> tt + 0.5 g tt^2 \[Beta], 
Im[z] /. t -> tt + 0.5 g tt^2 \[Gamma]}, a]]], {{z0x, -0.07, 
Style["\!\(\*SubscriptBox[\(z\), \(0\)]\)x", 20]}, -1, 1, 
0.01}, {{z0y, 0.06, 
Style["\!\(\*SubscriptBox[\(z\), \(0\)]\)y", 20]}, -1, 1, 
0.01}, {{v0x, 0.04, 
Style["\!\(\*SubscriptBox[\(v\), \(0\)]\)x", 20]}, -0.1, 0.1, 
0.001}, {{v0y, -0.04, 
Style["\!\(\*SubscriptBox[\(v\), \(0\)]\)y", 20]}, -0.1, 0.1, 
0.001}, {{tmax, 18, Style["tmax", 20]}, 0, 100, 
1}, {{\[Alpha], 0.0007, Style["\[Alpha]", 20]}, 0, 0.01, 
0.0001}, {{\[CapitalOmega], 10.47, Style["\[CapitalOmega]", 20]}, 1,
15, 0.1}, {{x, 0.4, Style["转动惯量系数", 20]}, 0.33, 
0.4}, {{m, 0.028, Style["m", 20]}, 0, 
1}, {{a, 0.0095, Style["a", 20]}, 0, 1, 
0.01}, {{tt, 0, Style["ttmax", 20]}, 0, tmax, 0.1}, 
ControlPlacement -> Left]
用户: 无知小儿 (116 分)
修改于 用户:无知小儿

1个回答

+1 投票
 
已采纳

问题
一、缺少文件:Import["F:\\大二下\\物创实验\\11\\tilt-3.txt", "Table"]
二、请给出脱离Manipulate的代码(在开始处给出各参数的默认值)
 

方法
生成每个时刻的图片,之后用Export导出即可。
另外,导出时你可能会用到这个参数"DisplayDurations",设置每帖的时间。

 

(其中的data没有数据,所以有些帖的图片中有红框):

pn = 60;(*帖数*)
pics = Table[Manipulate[\[Beta] = 0.0000; \[Gamma] = -0.000000;
    j = x m a^2;
    g = 10;
    h = 0.01;
    \[Mu] = 0.15;
    v1 = (v0x + v0y I);
    z1 = (z0x + z0y I);
    \[Lambda]1 = 
     1/(2 (j + a^2 m)) (I a \[Alpha] m + j \[CapitalOmega] - 
        Sqrt[-4 I a (j + 
             a^2 m) \[Alpha] m \[CapitalOmega] + (-I a \[Alpha] m - 
             j \[CapitalOmega])^2]);
    \[Lambda]2 = 
     1/(2 (j + a^2 m)) (I a \[Alpha] m + j \[CapitalOmega] + 
        Sqrt[-4 I a (j + 
             a^2 m) \[Alpha] m \[CapitalOmega] + (-I a \[Alpha] m - 
             j \[CapitalOmega])^2]);
    c = (v1 - (z1*I)*\[Lambda]2)/(I*(\[Lambda]1 - \[Lambda]2));
    d = (v1 - (z1*I)*\[Lambda]1)/(I*(\[Lambda]2 - \[Lambda]1));
    z = c*Exp[I \[Lambda]1 t] + d*Exp[I \[Lambda]2 t];
    vv1 = Re[D[z, t]];
    vv2 = Im[D[z, t]];
    vv = Sqrt[vv1^(2) + vv2^(2)];
    aa1 = Re[D[D[z, t], t]];
    aa2 = Im[D[D[z, t], t]];
    aa = Sqrt[aa1^2 + aa2^2];
    W = 1/2 (m vv^2 + j ((Abs[z]*\[CapitalOmega])/a)^2);
    xx = Flatten[Take[data, 400, {2}]];
    Show[ListPlot[
      Table[{Re[z] + 0.5 g t^2 \[Beta], 
        Im[z] + 0.5 g t^2 \[Gamma]}, {t, 0, tmax, h}], 
      AspectRatio -> Automatic, Joined -> True, 
      ImageSize -> {300, 300}, PlotLabel -> Style["小球轨迹", 30], 
      AxesLabel -> {"x/m", "y/m"}, 
      PlotRange -> {{-0.3, 0.3}, {-0.3, 0.3}}], 
     Graphics[
      Disk[{Re[z] /. t -> tt + 0.5 g tt^2 \[Beta], 
        Im[z] /. t -> tt + 0.5 g tt^2 \[Gamma]}, a]]], {{z0x, -0.07, 
      Style["\!\(\*SubscriptBox[\(z\), \(0\)]\)x", 20]}, -1, 1, 
     0.01}, {{z0y, 0.06, 
      Style["\!\(\*SubscriptBox[\(z\), \(0\)]\)y", 20]}, -1, 1, 
     0.01}, {{v0x, 0.04, 
      Style["\!\(\*SubscriptBox[\(v\), \(0\)]\)x", 20]}, -0.1, 0.1, 
     0.001}, {{v0y, -0.04, 
      Style["\!\(\*SubscriptBox[\(v\), \(0\)]\)y", 20]}, -0.1, 0.1, 
     0.001}, {{tmax, 18, Style["tmax", 20]}, 0, 100, 
     1}, {{\[Alpha], 0.0007, Style["\[Alpha]", 20]}, 0, 0.01, 
     0.0001}, {{\[CapitalOmega], 10.47, Style["\[CapitalOmega]", 20]},
      1, 15, 0.1}, {{x, 0.4, Style["转动惯量系数", 20]}, 0.33, 
     0.4}, {{m, 0.028, Style["m", 20]}, 0, 
     1}, {{a, 0.0095, Style["a", 20]}, 0, 1, 
     0.01}, {{tt, n, Style["ttmax", 20]}, 0, tmax, 0.1}, 
    ControlPlacement -> Left], {n, 0, 18 - 18/pn, 18/pn}];(*图片集*)

Export["E:/abc.gif", pics, 
 "DisplayDurations" -> ({0.5}~Join~ConstantArray[0.1, pn - 2]~
    Join~{0.5})];(*导出,首末帖0.5秒,其它帖0.1秒*)

 

用户: 野鹤 (5.1k 分)
采纳于 用户:无知小儿
请问“脱离Manipulate的代码”是什么意思呢各参数的初始值不是已经在控件内给出了吗?这个我不是很懂。
我希望是用Export直接输出GIF格式的图像,就像帮助中的那样。
我自己查了一下,找到了
http://blog.csdn.net/stereohomology/article/details/28448483
但是我照搬的时候没能成功。
你是否需要在导出的GIF中包含Manipulate的操作页面?如果需要,就没有必要“脱离Manipulate”了。

由于有11个参数,不可能在动态图片中遍历整个空间,即便每个个参数只取5个点,也需要${{5}^{11}}=48828125$帖。所以一般,固定绝大多数参数,只留一两个变化,不过最后还要归成一个变量——即第n帖。刚刚在上面的回答中增加了一个例子。
非常感谢,已经解决了我的问题。
至于data那一行可以删除了。
...