如何使用相机跟随对象在Wolfram Mathematica中创建2D(3D)动画?

时间:2011-03-21 10:24:41

标签: animation wolfram-mathematica

我有一个沿着轨迹移动的图形对象。如何让相机跟随物体?

2 个答案:

答案 0 :(得分:12)

让我们绘制一颗行星及其卫星,相机跟随着月球从地球的方向看。例如:

a = {-3.5, 3.5}; 
Animate[
 Show[
      Graphics3D[
           Sphere[3 {Cos@t, Sin@t, 0}, .5],  
                 ViewPoint -> 3.5 {Cos@t, Sin@t, 0},     
                 SphericalRegion -> True, 
                 PlotRange -> {a, a, a}, Axes -> False, Boxed -> False],
      myEarth], 
{t, 0, 2 Pi}]  

myEarth是另一个3D图形(供参考)。

enter image description here

静态垂直视图:

a = {-3.5, 3.5}; 
Animate[
 Show[
      Graphics3D[
           Sphere[3 {Cos@t, Sin@t, 0}, .5],  
                 ViewPoint -> 3.5 {0,0,1},     
                 SphericalRegion -> True, 
                 PlotRange -> {a, a, a}, Axes -> False, Boxed -> False],
      myEarth], 
{t, 0, 2 Pi}]  

enter image description here

技巧是 SphericalRegion - >真实,没有它,图像透视图从一帧到另一帧“移动”。

修改

有两个静态对象:

enter image description here

答案 1 :(得分:5)

由于问题是关于2D的问题,以下是如何在2D图形中模拟相机。

首先,让我们来看看stackoverflow的favicon.ico:

so = First@Import["http://sstatic.net/stackoverflow/img/favicon.ico"]

把它放在一些重叠的圆圈之上,并通过调整PlotRange

使“相机”跟随图标左右
Manipulate[Graphics[{
   Table[Circle[{j, 0}, i], {i, 0, 1, .1}, {j, {-.5, .5}}],
   Inset[so, pos, {0, 0}, .2]},
  PlotRange -> {{-.5, .5}, {-.5, .5}} + pos],
 {{pos, {0, 0}, ""}, {-1.4, -1}, {1.4, 1}, ControlPlacement -> Left}]

manipulate

为了展示它的工作原理(将上述内容放入Mathematica中),我们需要为它设置动画。 最初我选择了一个变步长随机游走drunk = Accumulate[RandomReal[{-.1, .1}, {200, 2}]],但这是不可预测的!相反,我们会将图标设为ABC徽标

drunk = Table[{1.5 Sin[t], Cos[3 t]}, {t, 0, 2 Pi, .1}];
Animate[Graphics[{
   Table[Circle[{j, 0}, i], {i, 0, 1, .1}, {j, {-.5, .5}}],
   Inset[so, drunk[[pos]], {0, 0}, .2]},
  PlotRange -> {{-.5, .5}, {-.5, .5}} + drunk[[pos]]],
 {pos, 1, Length[drunk], 1}]

animated