Animation 如何在Wolfram Mathematica中创建2D(3D)动画,使摄影机跟随对象?

Animation 如何在Wolfram Mathematica中创建2D(3D)动画,使摄影机跟随对象?,animation,wolfram-mathematica,Animation,Wolfram Mathematica,我有一个图形对象,它沿着轨迹移动。如何使相机跟随物体?让我们画一个行星及其卫星,相机从指向地球的角度跟随月球。例如: 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

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

让我们画一个行星及其卫星,相机从指向地球的角度跟随月球。例如:

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图形(供参考)

静态垂直视图:

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}]  

诀窍是spherecalregion->True,如果没有它,图像透视图会从一帧“移动”到另一帧

编辑

使用两个静态对象:


既然这个问题是关于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}]

为了展示它是如何工作的(不需要将上面的内容放到Mathematica中),我们需要为它设置动画。 最初我选择了一个可变步长的随机行走
dunk=acculate[RandomReal[{-.1,1},{200,2}]
,但这是一个不可预测的过程!因此,我们将使图标跟随徽标


+1。OP在问题标题中提到了“2D”和“camera”,这让我对是否寻求
Graphics
Graphics3D
解决方案感到困惑。你可以考虑添加<代码>图形等同于你的答案,只是为了覆盖所有的可能性,例如<代码>图形[…,Prrangang-{ A,A}+F[T],IVAPEPATION->无,……> /代码> ViewCenter和VIEWSHIFT也是在这方面有用的选项。@ WRACK我猜“相机”和“2D”是互斥的。因为“相机”很难拼错,在我看来2D应该是3D。遗憾的是,OP没有包含代码片段来更好地理解需求。如果您认为有价值,请随时为2D案例添加另一个答案。非常感谢您伟大的答案!这很有帮助。但我问了2D动画。这里有西蒙的迷幻(又名醉酒)图标:看着@belisarius美丽答案的评论,我发现我的解决方案正是@Florach推荐的。。。我认为这是用2D图形实现这一点的唯一合理方法。
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}]