渐近线:在动画中改变 POV 时保持窗口大小

渐近线:在动画中改变 POV 时保持窗口大小

在我发现的每个 Asymptote 动画示例中(参见例如这里或者这里),动画过程中视点是恒定的。我想制作一个由旋转视点组成的动画,其中绘制的对象是恒定的。

以下代码有效,但如您所见,结果gif不稳定。我该如何避免这种情况?

问题例证

size(10cm,10cm);
import graph3;
import grid3;
//import animation;
import animate;

settings.render=1;
animation A;
A.global=false;

real xmin=-2, xmax=2;
real ymin=-2, ymax=1.5;
real zmin=-2.5, zmax=2.5;

limits((xmin,ymin,zmin),(xmax,ymax,zmax));

unitsize(3cm,3cm,2cm);

viewportmargin=(2,2);


////// PLANES ///////
pen bg=gray(0.9)+opacity(0.2);
draw(surface((xmax,ymin,zmin)--(xmax,ymin,zmax)--(xmin,ymin,zmax)--(xmin,ymin,zmin)--cycle),bg);
draw(surface((xmin,ymax,zmin)--(xmin,ymax,zmax)--(xmin,ymin,zmax)--(xmin,ymin,zmin)--cycle),bg);
draw(surface((xmax,ymax,zmin)--(xmax,ymin,zmin)--(xmin,ymin,zmin)--(xmin,ymax,zmin)--cycle),bg);


xaxis3(Label("$x$",MidPoint,align=Y-Z),Bounds(Both,Min),InTicks(Step=1),p=black);
yaxis3(Label("$y$",MidPoint,align=X-Z),Bounds(Both,Min),InTicks(Step=.5),p=black);
zaxis3(Label("$z$",MidPoint,align=X-Y),Bounds(Both,Min),InTicks(Step=2),p=black);

for(real i;i<6.28;i=i+0.05) {
  currentprojection=perspective(camera=(2*cos(i),2*sin(i),2.5));    
  A.add();
  save();
}

A.movie(loops=3,delay=50);

编辑我按照 Harish Kumar 的建议添加了一个边界框;效果更好但仍然不够完美。

在此处输入图片描述

代码(仅末尾更改):

for(real i;i<6.28;i=i+.1) {
  currentprojection=perspective(camera=(2*cos(i),2*sin(i),2.5));
  picture pic;
  add(pic,bbox(20mm));  
  A.add(pic);
  save();
}

答案1

最好插入一个球体,它的投影不依赖于相机(在本例中)。请查看代码

size(10cm,10cm);
import graph3;
import grid3;
//import animation;
import animate;

settings.render=1;
animation A;
A.global=false;

real xmin=-2, xmax=2;
real ymin=-2, ymax=1.5;
real zmin=-2.5, zmax=2.5;

limits((xmin,ymin,zmin),(xmax,ymax,zmax));

unitsize(3cm,3cm,2cm);

viewportmargin=(2,2);


////// PLANES ///////
pen bg=gray(0.9)+opacity(0.2);
draw(surface((xmax,ymin,zmin)--(xmax,ymin,zmax)--(xmin,ymin,zmax)--(xmin,ymin,zmin)--cycle),bg);
draw(surface((xmin,ymax,zmin)--(xmin,ymax,zmax)--(xmin,ymin,zmax)--(xmin,ymin,zmin)--cycle),bg);
draw(surface((xmax,ymax,zmin)--(xmax,ymin,zmin)--(xmin,ymin,zmin)--(xmin,ymax,zmin)--cycle),bg);

xaxis3(Label("$x$",MidPoint,align=Y-Z),Bounds(Both,Min),InTicks(Step=1),p=black);
yaxis3(Label("$y$",MidPoint,align=X-Z),Bounds(Both,Min),InTicks(Step=.5),p=black);
zaxis3(Label("$z$",MidPoint,align=X-Y),Bounds(Both,Min),InTicks(Step=2),p=black);
draw(scale(4,4,5)*unitsphere,invisible);

for(real i;i<6.28;i=i+0.05) {
  currentprojection=perspective(camera=(2*cos(i),2*sin(i),2.5));
  A.add();
  save();
}

A.movie(loops=3,delay=50);

你获得此动画

在此处输入图片描述

奥格

相关内容