网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月03日漏签0天
mathematica吧 关注:19,811贴子:73,863
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 4回复贴,共1页
<<返回mathematica吧
>0< 加载中...

新人求助 如何用Mathematica做动画?

  • 只看楼主
  • 收藏

  • 回复
  • 看那萧瑟流光—
  • 还没搞定
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我用MMA算了一个摆(球面摆,悬点做匀速圆周运动的)的轨迹,求得轨迹图之后想做一个动画,想要能显示出运动的杆。。
大概就像图中效果一样的。。。只不过我的坐标是三维的...怎么就做不出来呢TAT
代码如下...求教求教


  • 看那萧瑟流光—
  • 还没搞定
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
r = 1
l = 1
m = 1
\[Omega] = 10
g = 9.8
x = r*Cos[\[Omega]*t] + l*Sin[\[Theta][t]] Cos[\[Phi][t]]
y = r*Sin[\[Omega]*t] + l*Sin[\[Theta][t]] Sin[\[Phi][t]]
z = l*Cos[\[Theta][t]]
L = 1/2 m ((D[x, t])^2 + (D[y, t])^2 + (D[z, t])^2) -m*g*z
{\[Theta]s, \[Phi]s} = NDSolveValue[{\!\(
\*SubscriptBox[\(\[PartialD]\), \(t\)]\((\*
SubscriptBox["\[PartialD]",
RowBox[{
SuperscriptBox["\[Theta]", "\[Prime]",
MultilineFunction->None], "[", "t", "]"}]]L)\)\) - \!\(
\*SubscriptBox[\(\[PartialD]\), \(\[Theta][t]\)]L\) == 0, \!\(
\*SubscriptBox[\(\[PartialD]\), \(t\)]\((\*
SubscriptBox["\[PartialD]",
RowBox[{
SuperscriptBox["\[Phi]", "\[Prime]",
MultilineFunction->None], "[", "t", "]"}]]L)\)\) - \!\(
\*SubscriptBox[\(\[PartialD]\), \(\[Phi][t]\)]L\) == 0,
Derivative[1][\[Theta]][0] == 10,
Derivative[1][\[Phi]][0] == 1, \[Theta][0] == 3/4 Pi, \[Phi][0] ==
0}, {\[Theta], \[Phi]}, {t, 0, 3}]
ParametricPlot3D[{r*Cos[\[Omega]*t] +
l*Sin[\[Theta]s[t]] Cos[\[Phi]s[t]],
r*Sin[\[Omega]*t] + l*Sin[\[Theta]s[t]] Sin[\[Phi]s[t]],
l*Cos[\[Theta]s[t]]}, {t, 0, 3}] 【注 到现在出的轨迹图应该是对的....】
point1[t] = {r*Cos[\[Omega]*t], r*Sin[\[Omega]*t], 0}
point2[t] = {r*Cos[\[Omega]*t] + l*Sin[\[Theta]s[t]] Cos[\[Phi]s[t]],
r*Sin[\[Omega]*t] + l*Sin[\[Theta]s[t]] Sin[\[Phi]s[t]],
l*Cos[\[Theta]s[t]]}
a = Table[
Show[Graphics3D[{Red, Thick,
Line[{{{0, 0, 0}, point1[t]}, {point1[t], point2[t]}}]},
PlotRange -> {{-2, 2}, {-2, 2}, {-2, 2}}, ImageSize -> 300],
ParametricPlot3D[{r*Cos[\[Omega]*t] +
l*Sin[\[Theta]s[t]] Cos[\[Phi]s[t]],
r*Sin[\[Omega]*t] + l*Sin[\[Theta]s[t]] Sin[\[Phi]s[t]],
l*Cos[\[Theta]s[t]]}, {t, 0, 3}]], {t, 0, 3, 0.1}];
Animate[a[[i]], {i, 0, 3, 0.1}, AnimationRate -> 300]
Export["Doublependulum.gif", a]


2025-06-03 15:52:15
广告
  • hjq447285628
  • For循环
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
point1的定义应该是point1[t_]=xxx,point2也是,而且定义函数最好用 :=
定义a那句,如果你想实现摆到哪,轨迹画到哪的话,ParametricPlot3D的范围t的上界应该是外层Table的t的大小,但是直接这样会报错(应该是运算顺序的问题),而且Graphics3D和ParametricPlot3D也不能直接Show到一起,这句问题比较多,每个问题具体怎么改我也不太会,所以稍微换了一下画图的方法
Animate那句a[[i]]的i是列表的下标,所以应该是从1到30的整数,而且一共就30张图, AnimationRate设300啥都看不清
修改的代码如下(前面到“【注 xxx是对的....】”一样就不贴了)
point1[t_] := {r*Cos[\[Omega]*t], r*Sin[\[Omega]*t], 0}
point2[t_] := {r*Cos[\[Omega]*t] +
l*Sin[\[Theta]s[t]] Cos[\[Phi]s[t]],
r*Sin[\[Omega]*t] + l*Sin[\[Theta]s[t]] Sin[\[Phi]s[t]],
l*Cos[\[Theta]s[t]]}
a = ParametricPlot3D[{point1[#] t/#,
point1[#] (1 - t/#) + point2[#] t/#, {r*Cos[\[Omega]*t] +
l*Sin[\[Theta]s[t]] Cos[\[Phi]s[t]],
r*Sin[\[Omega]*t] + l*Sin[\[Theta]s[t]] Sin[\[Phi]s[t]],
l*Cos[\[Theta]s[t]]}}, {t, 0, #},
PlotStyle -> {{Red, Thick}, {Red, Thick}, {Blue, Thin}},
PlotRange -> {{-2, 2}, {-2, 2}, {-2, 2}}] & /@
Table[i, {i, 0.1, 3, 0.1}];
Animate[a[[i]], {i, 1, 30, 1}, AnimationRate -> 3]
我会说我只是想看看画出来是什么样才点进来的吗


  • 看那萧瑟流光—
  • 还没搞定
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
谢谢谢谢谢谢谢~


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 4回复贴,共1页
<<返回mathematica吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示