渐近线中的动画

我的博客复制来创建有关此主题的另一种俄语信息来源。

你好 当我在掌握Asymptote程序的过程中(当我在集线器中了解了此处描述的该程序的设置的细微差别时发生),完全掌握了没有动画的.asy文件的处理时,我自然地遇到了动画。

扰流板方向
给群众动画!

幸运的是,对于.pdf输出格式来说,我没有使用上面的链接在集线器中描述的其他程序,在安装了ghostscript程序之后,您无需安装,甚至魔鬼也知道它挖掘了多长时间。 但是后来我对此一无所知,这使事情复杂化了许多次。 您处理wheel.asy文件又是什么? 好吧,.pdf在处理过程中在TeXworks(请参阅上面的链接)中与已处理的.asy文件位于同一文件夹中,并在Explorer(请参见同一集线器)中在C:\Windows\System32 。 那又怎样 即使您破解了,也没有动画,仅此而已。 在使用Asymptote制作动画之前,我学习了如何用tikzpstricks制作动画。 因此,直到我从C:\Program Files\MiKTeX 2.9\tex\latex\animate文件夹中删除了animate.sty文件,然后将同名文件放入以后再下载,我才成功。 他在那儿 。 因此,知道 该软件包适用于tikz和pstricks,我倾向于认为它对我不起作用,很可能不是因为TeX存在问题,而是由于其他一些原因。 因此,我搜索了旧互联网已有好几年了。 起初,我在IE浏览器中搜索,嗯,那里没有方便的翻译器。 然后我闻到Google里面有一个方便的翻译器。 还搜索,搜索,搜索,搜索,直到他遇到页面为止。 事实证明,出于某种原因,在C:\Program Files\Asymptote\examples\animations文件夹中的所有.asy文件中,要从中获取带有动画的.pdf文件,单行不足

 settings.twice=true; 

我从示例文件夹的动画子文件夹中将这一行添加到wheel.asy文件中:

终于动画了!
 import graph; // Uncomment the following 2 lines to support pdf animations: usepackage("animate"); settings.tex="pdflatex"; settings.twice=true; import animation; size(0,200); defaultpen(3); dotfactor=4; pair wheelpoint(real t) { return (t+cos(t),-sin(t)); } guide wheel(guide g=nullpath, real a, real b, int n) { real width=(ba)/n; for(int i=0; i <= n; ++i) { real t=a+width*i; g=g--wheelpoint(t); } return g; } real t1=0; real t2=t1+2*pi; animation a; draw(circle((0,0),1)); draw(wheel(t1,t2,100),linetype("0 2")); yequals(Label("$y=-1$",1.0),-1,extend=true,linetype("4 4")); xaxis(Label("$x$",align=3SW),0); yaxis("$y$",0,1.2); pair z1=wheelpoint(t1); pair z2=wheelpoint(t2); dot(z1); dot(z2); int n=10; real dt=(t2-t1)/n; for(int i=0; i <= n; ++i) { save(); real t=t1+dt*i; draw(circle((t,0),1),red); dot(wheelpoint(t)); a.add(); // Add currentpicture to animation. restore(); } erase(); // Merge the images into a gif animation. //a.movie(BBox(0.25cm),loops=10,delay=250); // Merge the images into a pdf animation. label(a.pdf(BBox(0.25cm),delay=250,"controls",multipage=false)); 


同时,为了接收.pdf并知道300个英语单词,我意识到我需要用wheel.asy文件的形式取消注释,在该文件中,用户从Asymptote程序的作者那里获得了它,分为2行:

 ....................... usepackage("animate"); settings.tex="pdflatex"; ....................... 

查看wheel.asy文件末尾在这些行上的注释:

 ........................ // Merge the images into a gif animation. a.movie(BBox(0.25cm),loops=10,delay=250); // Merge the images into a pdf animation. // label(a.pdf(BBox(0.25cm),delay=250,"controls",multipage=false)); 

,我意识到要获取.pdf,我需要重做从程序作者那里获得的代码,并注释掉该行

 a.movie(BBox(0.25cm),loops=10,delay=250); 

,然后取消注释

 label(a.pdf(BBox(0.25cm),delay=250,"controls",multipage=false)); 

以及这些身体运动之后我的车轮如何滚动! 渐近程序的作者的逻辑也是难以理解的:获得.gif比获得.pdf不仅需要一个额外的程序。 完全不知道如何执行此操作的用户很可能会观看带有示例的文件。 好吧,这样做是为了使这些用户在不更改任何文件的情况下立即打开这些文件时,就可以收到需要较少附加程序的格式-.pdf,不,他们制作了.gif。 为什么?? 好吧好吧。 是的,我还要注意,当在资源管理器中打开wheel.asy文件(请参见我的hub )以从中获取可用的.gif时,config.asy文件与它位于同一文件夹中(请参见我的hub )是可选的。 让我提醒您,这种情况下(在资源管理器中打开时).gif是在C:\Windows\System32 。 在TeXworks中处理此.asy文件时,必须在与要处理的文件相同的文件夹中存在config.asy(或将我在上一个链接中描述的行直接包含到已处理的.asy文件本身中)。 好吧,这是。 我把这个滚轮弄直了,我笑了起来,很高兴。 那天晚上。 我上床了 醒来并补偿。 打开计算机时,他坐着揉手。 好吧,我想,现在我将在数学上开始为我们使用燃料油。) 是的,现在。 示例的子文件夹中的动画几乎成功了所有内容,除了Embeddedmovie.asy,externalmovie.asy和Embeddedu3d.asy。 我稍后等待了前2个文件,但最后一个文件却不起作用:据我所知,在那里需要从某个地方另外下载一些dice.u3d文件,对于一个小公司来说,哪个文件是一个大秘密。 好吧,那是:“哦,王国还不够,没有漫游的地方。” 我写了,有这样一个代码:

 settings.twice=true; usepackage("animate"); import solids; settings.tex="pdflatex"; import animation; settings.outformat="pdf"; settings.axes3=true; import graph3; import palette; currentprojection=orthographic(1,1,1); limits((-1.3,-1.3,-1.3),(1.3,1.3,1.3)); unitsize(6cm); animation a; int n=44; for(int i=0; i<=n; ++i){ real g(real x) {return sqrt(1-x^2);} pair G(real x) {return (x,g(x));} triple G3(real x) {return (x,g(x),0);} path q=graph(G,1-i/n,1); path3 q3=path3(q); revolution c=revolution(q3,X,0,360); draw(surface(c),red); real f(real x) {return sqrt(1-x^2);} pair F(real x) {return (x,f(x));} triple F3(real x) {return (x,f(x),0);} path p=graph(F,-1,-1+i/n); path3 p3=path3(p); revolution b=revolution(p3,X,0,360); draw(surface(b),green); axes3("$x$","$y$","$z$",Arrow3); a.add(); restore(); } erase(); label(a.pdf("controls,loop",delay=1000)); 

我在TeXworks中收到以下有希望的错误:

 error: out of memory 

在资源管理器中打开此.asy文件时(请参见上方的集线器链接),错误相同。 是的 我蒸了,蒸了,浑了起来,我发现 n=3结果是带有动画的.pdf,但已经存在 n=4该错误也会出现。 让我在“渐近线” 论坛上问一下。 但是盎格鲁撒克逊人是守法的人,他们不喜欢从指令中退缩。 他们什么也没想出来。 怎么办 值得浪费一半的互联网来迷失在这样的垃圾上吗? 好吧,俄罗斯人不会放弃! 此外,普通的英雄总是四处走动...我开始观察在TeXworks中处理wheel.asy文件的过程,我看到了什么? 首先,出现文件_wheel + 0.pdf,_wheel + 1.pdf,...,_ wheel + 10.pdf,然后从这些文件中形成一个多页文件_wheel.pdf,并进一步在程序中。 为了做到这一点,动画模块被导入到.asy文件中,他们将从中获取动画 。 然后我有了一个主意。 但是,如果在此模块(文件C:\Program Files\Asymptote\animation.asy )中找到一个生成_wheel + 0.pdf之类的文件并将其关闭的地方怎么办? 您是否使用批处理文件中由回送生成的渐近线处理.asy文件标记这些文件? 可以根据需要使用名称+ 0.asy名称+ 1.asy等创建这些.asy文件。 该名称是与要创建的动画相关联的一组拉丁字母,您很可能希望在带有动画的现成pdf上进行更改。 但是会晚一些。 同时,在创建文件后, 名称为+ 0.asy名称为+ 1.asy ...根据我的想法,应遵循渐近线进行的处理。 这将创建文件名+ 0.pdf名称+ 1.pdf ...在创建文件名+ 0.asy名称+ 1.asy ...的代码之前,我必须在批处理文件中插入行以创建文件名.asy或更确切地说,只需几行即可输入此文件。 文件name.asy将仅作为批处理文件的结果而形成。 在此文件中,名称为.asy,我打算导入转换后的动画模块而不是动画模块本身。 我本着wheel.asy文件开头的精神,决定使此文件名.asy的开头最简单。 循环之后,我愚蠢地复制了此文件中的行并将其粘贴到批处理文件中,如下所示:

 echo  >> .asy 



 echo  >> .asy 

我编写了批处理文件,以便在创建的文件中使用名称,很容易,循环的主体为空,结果在哪里,结果如下:

 for(int i=0; i <= n; ++i) { 

在批处理文件中,代码行上方的行将其输入文件名。asy是一行

 echo int n=%n%; >>%name%.asy 

,此批处理文件的第三和第四行是:
 set n=24 set name=OdnopGip 

,因此在文件名开始循环处理时,在这种情况下,Easy Asymptote已经知道n的值,并且一切正常。 在翻译成本文语言时,环境变量名称的意思是name.asy中名称 。 在这种情况下,通过set在批处理文件中声明name或n的值似乎非常方便:在批处理文件中仅在一个位置更改它们的值就需要更改在处理某个.asy文件或数字时生成的.tex,.pdf文件的所有名称。生成的动画pdf中的帧,实质上改变了动画的细节。 好吧,这是。 因此,我准备了框架名称+ 0.pdf名称+ 1.pdf ...,但是,由于在准备打开每个框架之后,我必须在批处理文件中包含一个命令以将其关闭。 由于我不知道如何从批处理文件中关闭具有特定标题的窗口,因此在空白处理周期.asy的批处理文件中添加了以下命令:
 taskkill /IM AcroRd32.exe 

,这在以后运行所有过程的结果中都比关闭每个特定帧还要好:有时,该帧仍然没有时间出现在监视器上,并且下一个.asy文件的处理已经开始,最后一帧出现在监视器上,最后一个使用该循环的下一个步骤的命令,将关闭下一个步骤的框架和上一个步骤的框架(运行的批处理文件将经过该框架),尽管很明显,在执行.pdf格式的书期间,在此批处理文件中包含此命令后,它不再 我不好,是的。 按照逻辑,我需要将文件名+ 0.asy,名称+ 1.asy,...重命名为_name + 0.asy,_name + 1.asy,...,因为存在与这些名称完全相同的文件带有正在处理.asy文件的文件夹,其中包含动画,需要处理此文件,前提是在开始生成name.pdf文件之前导入了本机动画模块(是的,我可以将组成框架的代码行插入变量k中的批处理文件中,文件名+ k.asy和文件名_name + k.asy,但这需要更多输入字符“ _”,并进一步处理渐近线伤口 的E文件创建imya.asy总之,按照原来的想法是有一个批处理文件,如下所示:

 cd /d %0\.. echo off set n=99 set name=cvetok echo settings.twice=true; > %name%.asy echo usepackage("animate"); >>%name%.asy echo settings.tex="pdflatex"; >>%name%.asy echo import izgraphiki; >>%name%.asy echo animation a; >>%name%.asy echo int n=%n%; >>%name%.asy echo for(int i=0; i ^<= n; ++i) { >>%name%.asy echo a.add(); >>%name%.asy echo restore(); >>%name%.asy echo } >>%name%.asy echo erase(); >>%name%.asy echo label(a.pdf(BBox(0.25cm),delay=250,"controls",multipage=false)); >>%name%.asy for /l %%k in (0,1,%n%) do ( echo import graph; >> %name%+%%k.asy echo settings.tex="pdflatex"; >> %name%+%%k.asy echo limits((-1.2,-1.2^),(1.2,1.2^)^); >> %name%+%%k.asy echo size(0,100^); >> %name%+%%k.asy echo real f(real t^) {return cos(2*t^);} >> %name%+%%k.asy echo path g=polargraph(f,0,2pi*%%k/%n%,operator ..^)--cycle; >> %name%+%%k.asy echo fill(g,green+white^); >> %name%+%%k.asy echo xaxis("$x$",above=true^); >> %name%+%%k.asy echo yaxis("$y$",above=true^); >> %name%+%%k.asy echo draw(g^); >> %name%+%%k.asy ) for /l %%l in (0,1,%n%) do ( asy %name%+%%l.asy taskkill /IM AcroRd32.exe ) for /l %%l in (0,1,%n%) do ( rename %name%+%%l.pdf _%name%+%%l.pdf ) asy %name%.asy 

在这里,我们看到我正在导入我在上面修改的animation.asy模块。 我给这个模块起了简单的名字izgraphiki.asy。 对于我得到的动画.pdf文件,我没有想到比cvetok更好的名称。 显然是因为他缺乏想象力。 好吧,来吧,怎么回事。 在本故事的结尾,我将告诉您“我的” izgraphiki.asy模块,以免现在失去故事的脉络,但现在我要注意的是,尝试将该文件命名为iz-graphiki.asy,然后将其命名为iz + graphiki.asy以进行测试没有达到预期的目标:我的批处理文件的工作如火如荼地停止了,并且在任何情况下都没有恢复。 显然,“渐近线”程序的模块应仅包含拉丁字母。 无论如何,遵守这一条件当然不会有任何伤害。 因此,我上面引用的批处理文件的工作以一个令人垂涎的.pdf文件的外观结束,该文件带有任意大的动画(在合理的范围内,以免等待3个小时,它可以正常工作,动画的.pdf出现了,一切都很好,但是计算机的执行速度很快操作仅是最终的)。 让我对3d对象进行动画制作。 然后,另一个麻烦变得清晰了。 我设法用这些物体盖上镜头,但是,就是这样。 在这些框架上,这些对象被证明是在空间中旋转的,在这里一切都很好,但是仅由于pdf框架中存在这种体积,所以不能将它们用于构建带有动画的pdf框架。 让我再想一想。 观看略微修改的sphere.asy文件的处理:

稍微修改的sphere.asy文件
 settings.twice=true; usepackage("animate"); import solids; settings.tex="pdflatex"; import animation; settings.outformat="pdf"; currentprojection=orthographic((0,5,2)); currentlight=(0,5,5); int nbpts=200; real step=2*pi/nbpts; int angle=90; unitsize(1cm); triple[] P=new triple[nbpts]; for(int i=0; i < nbpts; ++i) { real t=-pi+i*step; P[i]=(3sin(t)*cos(2t),3sin(t)*sin(2t),3cos(t)); } transform3 t=rotate(angle,(0,0,0),(1,0.25,0.25)); revolution r=sphere(O,3); draw(surface(r),lightgrey); draw(r,backpen=linetype("8 8",8)); animation A; for(int phi=0; phi < 360; phi += angle) { bool[] front=new bool[nbpts]; save(); for(int i=0; i < nbpts; ++i) { P[i]=t*P[i]; front[i]=dot(P[i],currentprojection.camera) > 0; } draw(segment(P,front,operator ..),1mm+blue+extendcap); draw(segment(P,!front,operator ..),grey); A.add(); restore(); } label(A.pdf()); 


,我注意到在此过程中动画的所有帧都出现并没有顺序消失,但在2d版本中只有它们(如果我可以这样说的话):我认为这是完整的3D图形,但是如果尝试从Abode查看器窗口的不同侧面查看它们读者可以通过按下鼠标左键来移动阅读器,这与使用渐近线获得的3d图形所期望的一样,除非在开始在.asy文件中制作带有动画的.pdf之前有意关闭此考虑的可能性,否则这是不可能的 日。 这些2d框架的名称:_sphere + 0.pdf,_sphere + 1.pdf,... ...了解了处理具有3d对象动画的.asy文件时空间2d框架的生成之后,我想到从批处理文件中获取.pdf框架。为了进一步处理.asy文件,其中有一个空主体的循环,我在批处理文件的开头生成了该循环,不仅处理.asy文件,还处理.asy文件,每个文件都有一个循环。 这些.asy文件存根中的每个循环都从其中接收一个.pdf帧,我组成了一个单一的帧:我并不是让这些存根从中获取带有动画的.pdf,而是顺便得到了一个二维帧在处理每个.asy存根文件的过程中。 为了接收带有此类循环的.asy空白文件,我做了这样的设置,以便在所有空白文件.asy的循环中,这些循环的变量在循环的开始和结束时取相同的值-0。处理导致的.pdf帧之间的差异播放工件文件的渐近线.asy是由工件文件循环循环的主体中的差异引起的。asy(差异)又是由于在工件文件循环的主体功能中引入了批处理文件循环变量的每个顺序值.asy由批处理文件在其变量时创建齐 Kla取下一个值,冻结,等待完成采购文件.asy的创建,该采购文件对应于批处理文件循环变量的该值。 简而言之,这些差异是由批处理文件循环变量创建的。 这些2d框架的名称采用以下形式:name + k + 0.pdf,其中,因为这些2d框架是批处理文件循环变量更改的结果, k在步骤1中从0到批处理文件循环变量的最终值。要从.asy文件中获取动画的.pdf,而该文件具有之前由批处理文件创建的循环的空主体,则.pdf框架名称应采用以下格式:_name + k.pdf。 因此,批处理文件中的下一个团队我将这些帧重命名为-.pdf。 我做了一个循环。 最后,处理团队使用空循环主体运行Asymptote .asy文件。 完成此处理后,将显示带有动画的.pdf。 在批处理文件中,此命令之后,我没有编写任何命令来打开带有动画的.pdf文件,因为默认情况下会假定此打开,因此带有动画的.pdf文件无论如何在此处理结束时都会打开,就像打开.pdf文件一样由渐近线生成,无需处理动画即可处理.asy文件。 如果读者观察到了通过子文件夹处理.asy文件的过程以及带有Asymptote程序文件夹中的examples文件夹的动画的过程,那么他将理解_name + k.pdf中的部分名称应与带有空循环主体的.asy文件的名称重合。 _name + k.pdf文件是重命名其他一些.pdf文件(文件名+ k + 0.pdf)的结果,这些文件又是该程序处理某些.asy文件的副产品,因此,为了简化任务,我制作了这些文件.asy由名称为+ 0.asy的批处理文件创建,名称为+ 1.asy,...。好了,我介绍了我计划的批处理文件的工作原理,现在该举一个此类批处理文件的示例了。 例如,这:

 cd /d %0\.. echo off set n=44 echo settings.twice=true; >>sphera.asy echo usepackage("animate"); >>sphera.asy echo settings.tex="pdflatex"; >>sphera.asy echo import izgraphiki; >>sphera.asy echo animation a; >>sphera.asy echo int n=%n%; >>sphera.asy echo for(int i=0; i ^<= n; ++i) { >>sphera.asy echo a.add(); >>sphera.asy echo restore(); >>sphera.asy echo } >>sphera.asy echo erase(); >>sphera.asy echo label(a.pdf(BBox(0.25cm),delay=250,"controls,loop,autoplay",multipage=false)); >>sphera.asy for /l %%k in (0,1,%n%) do ( echo settings.twice=true; >> sphera+%%k.asy echo usepackage("animate"^); >> sphera+%%k.asy echo import solids; >> sphera+%%k.asy echo settings.tex="pdflatex"; >> sphera+%%k.asy echo import animation; >> sphera+%%k.asy echo settings.outformat="pdf"; >> sphera+%%k.asy echo settings.axes3=true; >> sphera+%%k.asy echo import graph3; >> sphera+%%k.asy echo import palette; >> sphera+%%k.asy echo currentprojection=orthographic(1,1,1^); >> sphera+%%k.asy echo limits((-1.3,-1.3,-1.3^),(1.3,1.3,1.3^)^); >> sphera+%%k.asy echo unitsize(6cm^); >> sphera+%%k.asy echo animation a=animation(global=false^); //  (global=false^)   >>sphera+%%k.asy echo //C:\Program Files\Asymptote/plain_shipout.asy: 87.10: runtime: Cannot rename _sphera+2+0_.pdf to >>sphera+%%k.asy echo //_sphera+2+0.pdf >>sphera+%%k.asy echo for(int i=0; i ^<= 0; ++i^) { >>sphera+%%k.asy echo real f(real x^) {return sqrt(1-x^^2^);} >> sphera+%%k.asy echo pair F(real x^) {return (x,f(x^)^);} >> sphera+%%k.asy echo triple F3(real x^) {return (x,f(x^),0^);} >> sphera+%%k.asy echo path p=graph(F,-1+i,-1+i+%%k/%n%^); >> sphera+%%k.asy echo path3 p3=path3(p^); >> sphera+%%k.asy echo revolution b=revolution(p3,X,0,360^); >> sphera+%%k.asy echo draw(surface(b^),green^); >> sphera+%%k.asy echo real g(real x^) {return sqrt(1-x^^2^);} >> sphera+%%k.asy echo pair G(real x^) {return (x,f(x^)^);} >> sphera+%%k.asy echo triple G3(real x^) {return (x,g(x^),0^);} >> sphera+%%k.asy echo path q=graph(G,1-i-%%k/%n%,1-i^); >> sphera+%%k.asy echo path3 q3=path3(q^); >> sphera+%%k.asy echo revolution c=revolution(q3,X,0,360^); >> sphera+%%k.asy echo draw(surface(c^),red^); >> sphera+%%k.asy echo axes3("$x$","$y$","$z$",Arrow3^); >> sphera+%%k.asy echo a.add(^); >>sphera+%%k.asy echo restore(^); >>sphera+%%k.asy echo } >>sphera+%%k.asy echo erase(^); >>sphera+%%k.asy echo label(a.pdf(^)^); >>sphera+%%k.asy ) rem for /f %%l in (0,1,%n%) do asy '_sphera+%%l'.asy for /l %%l in (0,1,%n%) do ( asy sphera+%%l.asy taskkill /F /IM AcroRd32.exe ) for /l %%l in (0,1,%n%) do rename sphera+%%l+0.pdf _sphera+%%l.pdf asy sphera.asy 

请注意行

 echo for(int i=0; i ^<= n; ++i) { >>sphera.asy 

由于符号<对于命令行解释器具有特殊含义,因此为了使该解释器在字面意义上使用此符号,我通过在其前面加上^符号来对其进行转义。 ^ , . , , ,

 for /l %%k in (0,1,%n%) do ( 

, , . ( , , sphera.asy :

 settings.twice=true; usepackage("animate"); settings.tex="pdflatex"; import izgraphiki; animation a; int n=44; for(int i=0; i <= n; ++i) { a.add(); restore(); } erase(); label(a.pdf(BBox(0.25cm),delay=250,"controls,loop,autoplay",multipage=false)); 

sphera+0.asy, sphera+1.asy,..., sphera+44.asy, Asymptote 2d- sphera+0.pdf, sphera+1.pdf,..., sphera+44.pdf. , sphera+4.asy :

 settings.twice=true; usepackage("animate"); import solids; settings.tex="pdflatex"; import animation; settings.outformat="pdf"; settings.axes3=true; import graph3; import palette; currentprojection=orthographic(1,1,1); limits((-1.3,-1.3,-1.3),(1.3,1.3,1.3)); unitsize(6cm); animation a=animation(global=false); //          (global                  //C:\Program Files\Asymptote/plain_shipout.asy: 87.10: runtime: Cannot rename _sphera+2+0_.pdf to //_sphera+2+0.pdf for(int i=0; i <= 0; ++i) { real f(real x) {return sqrt(1-x^2);} pair F(real x) {return (x,f(x));} triple F3(real x) {return (x,f(x),0);} path p=graph(F,-1+i,-1+i+4/44); path3 p3=path3(p); revolution b=revolution(p3,X,0,360); draw(surface(b),green); real g(real x) {return sqrt(1-x^2);} pair G(real x) {return (x,f(x));} triple G3(real x) {return (x,g(x),0);} path q=graph(G,1-i-4/44,1-i); path3 q3=path3(q); revolution c=revolution(q3,X,0,360); draw(surface(c),red); axes3("$x$","$y$","$z$",Arrow3); a.add(); restore(); } erase(); label(a.pdf()); 

, sphera+4.asy TeXworks', UTF-8:

图片

ANSI. , - .asy, , , Asymptote. 2d- . 2d-, , , 2d-. - .asy , . 2d- sphera+0+0.pdf, sphera+1+0.pdf,..., sphera+44+0.pdf _sphera+0.pdf, _sphera+1.pdf,..., _sphera+44.pdf, , , Asymptote sphera.asy. . .gif , .gif - . .gif, .pdf , , , , . ., , .pdf , .gif . .gif , :

 cd /d %0\.. echo off set n=44 echo import graph; >sphera.asy echo settings.twice=true; >>sphera.asy echo usepackage("animate"); >>sphera.asy echo settings.tex="pdflatex"; >>sphera.asy echo import izgraphikigif; >>sphera.asy echo animation a; >>sphera.asy echo yequals(Label("$y=-1$",1.0),-1,extend=true,linetype("4 4")); >>sphera.asy echo int n=%n%; >>sphera.asy echo for(int i=0; i ^<= n; ++i) { >>sphera.asy echo a.add(); >>sphera.asy echo restore(); >>sphera.asy echo } >>sphera.asy echo erase(); >>sphera.asy echo a.movie(); >>sphera.asy for /l %%k in (0,1,%n%) do ( echo settings.twice=true; > sphera+%%k.asy echo usepackage("animate"^); >> sphera+%%k.asy echo import solids; >> sphera+%%k.asy echo settings.tex="pdflatex"; >> sphera+%%k.asy echo import animation; >> sphera+%%k.asy echo settings.outformat="pdf"; >> sphera+%%k.asy echo settings.axes3=true; >> sphera+%%k.asy echo import graph3; >> sphera+%%k.asy echo import palette; >> sphera+%%k.asy echo currentprojection=orthographic(1,1,1^); >> sphera+%%k.asy echo limits((-1.3,-1.3,-1.3^),(1.3,1.3,1.3^)^); >> sphera+%%k.asy echo unitsize(6cm^); >> sphera+%%k.asy echo animation a=animation(global=false^); //  (global=false^)   >>sphera+%%k.asy echo //C:\Program Files\Asymptote/plain_shipout.asy: 87.10: runtime: Cannot rename _sphera+2+0_.pdf to >>sphera+%%k.asy echo //_sphera+2+0.pdf >>sphera+%%k.asy echo for(int i=0; i ^<= 0; ++i^) { >>sphera+%%k.asy echo real f(real x^) {return sqrt(1-x^^2^);} >> sphera+%%k.asy echo pair F(real x^) {return (x,f(x^)^);} >> sphera+%%k.asy echo triple F3(real x^) {return (x,f(x^),0^);} >> sphera+%%k.asy echo path p=graph(F,-1+i,-1+i+%%k/%n%^); >> sphera+%%k.asy echo path3 p3=path3(p^); >> sphera+%%k.asy echo revolution b=revolution(p3,X,0,360^); >> sphera+%%k.asy echo draw(surface(b^),green^); >> sphera+%%k.asy echo real g(real x^) {return sqrt(1-x^^2^);} >> sphera+%%k.asy echo pair G(real x^) {return (x,f(x^)^);} >> sphera+%%k.asy echo triple G3(real x^) {return (x,g(x^),0^);} >> sphera+%%k.asy echo path q=graph(G,1-i-%%k/%n%,1-i^); >> sphera+%%k.asy echo path3 q3=path3(q^); >> sphera+%%k.asy echo revolution c=revolution(q3,X,0,360^); >> sphera+%%k.asy echo draw(surface(c^),red^); >> sphera+%%k.asy echo axes3("$x$","$y$","$z$",Arrow3^); >> sphera+%%k.asy echo a.add(^); >>sphera+%%k.asy echo restore(^); >>sphera+%%k.asy echo } >>sphera+%%k.asy echo erase(^); >>sphera+%%k.asy echo label(a.pdf(^)^); >>sphera+%%k.asy ) for /l %%l in (0,1,%n%) do ( asy sphera+%%l.asy taskkill /F /IM AcroRd32.exe ) rem for /l %%l in (0,1,%n%) do rename sphera+%%l+0.pdf _sphera+%%l.pdf asy sphera.asy 

, , .gif wheel.asy. ,

 yequals(Label("$y=-1$",1.0),-1,extend=true,linetype("4 4")); 

sphera.asy , . , /« » .asy . .gif, Imagemagick 2d-:

图片

, . , . ?

magick *.eps sphere.gif , , 2d- .eps. .gif . , 10 )). , , . , , , animation.asy. , ( ) ? .gif . , izgraphiki.asy – animation.asy – .pdf ( (. ) 3d ) .gif ( (. ) 3d ). , «» . «» .pdf, animation.asy, ( , ) - 4 , , -, : : , . , ( ) . animation.asy:

 string format=nativeformat(); plain.shipout(name,f,format=format,view=false); files.push(name+"."+format); shipped=false; 

, izgraphiki.asy:

 //string format=nativeformat(); //plain.shipout(name,f,format=format,view=false); //files.push(name+"."+format); //shipped=false; 

izgraphiki.asy:

izgraphiki.asy
 /***** * animation.asy * Andy Hammerlindl and John Bowman 2005/11/06 * * Produce GIF, inline PDF, or other animations. *****/ // animation delay is in milliseconds real animationdelay=50; typedef frame enclosure(frame); frame NoBox(frame f) { return f; } enclosure BBox(real xmargin=0, real ymargin=xmargin, pen p=currentpen, filltype filltype=NoFill) { return new frame(frame f) { box(f,xmargin,ymargin,p,filltype,above=false); return f; }; } struct animation { picture[] pictures; string[] files; int index; string prefix; bool global; // If true, use a global scaling for all frames; this requires // extra memory since the actual shipout is deferred until all frames have // been generated. void operator init(string prefix="", bool global=true) { prefix=replace(stripdirectory(outprefix(prefix))," ","_"); this.prefix=prefix; this.global=global; } string basename(string prefix=stripextension(prefix)) { return "_"+prefix; } string name(string prefix, int index) { return stripextension(prefix)+"+"+string(index); } private string nextname() { string name=basename(name(prefix,index)); ++index; return name; } void shipout(string name=nextname(), frame f) { // string format=nativeformat(); // plain.shipout(name,f,format="png",view=false); //generiruet!!!! //files.push(name+"."+format); // shipped=false; } void add(picture pic=currentpicture, enclosure enclosure=NoBox) { if(global) { ++index; pictures.push(pic.copy()); } else this.shipout(enclosure(pic.fit())); } void purge(bool keep=settings.keep) { if(!keep) { for(int i=0; i < files.length; ++i) delete(files[i]); } } int merge(int loops=0, real delay=animationdelay, string format="gif", string options="", bool keep=settings.keep) { string args="-loop " +(string) loops+" -delay "+(string)(delay/10)+ " -alpha Off -dispose Background "+options; for(int i=0; i < files.length; ++i) args += " " +files[i]; int rc=convert(args,prefix+"."+format,format=format); this.purge(keep); if(rc == 0) animate(file=prefix+"."+format,format=format); else abort("merge failed"); return rc; } void glmovie(string prefix=prefix, projection P=currentprojection) { if(!view() || settings.render == 0) return; fit(prefix,pictures,view=true,P); } // Export all frames with the same scaling. void export(string prefix=prefix, enclosure enclosure=NoBox, bool multipage=false, bool view=false, projection P=currentprojection) { if(pictures.length == 0) return; if(!global) multipage=false; bool inlinetex=settings.inlinetex; if(multipage) settings.inlinetex=false; frame multi; frame[] fits=fit(prefix,pictures,view=false,P); for(int i=0; i < fits.length; ++i) { string s=name(prefix,i); if(multipage) { add(multi,enclosure(fits[i])); newpage(multi); files.push(s+"."+nativeformat()); } else { if(pictures[i].empty3() || settings.render <= 0) this.shipout(s,enclosure(fits[i])); else // 3D frames files.push(s+"."+nativeformat()); } } if(multipage) { plain.shipout(prefix,multi,view=view); settings.inlinetex=inlinetex; } shipped=true; } string load(int frames, real delay=animationdelay, string options="", bool multipage=false) { if(!global) multipage=false; string s="\animategraphics["+options+"]{"+format("%.18f",1000/delay,"C")+ "}{"+basename(); if(!multipage) s += "+"; s += "}{0}{"+string(frames-1)+"}"; return s; } bool pdflatex() { return latex() && pdf(); } string pdf(enclosure enclosure=NoBox, real delay=animationdelay, string options="", bool keep=settings.keep, bool multipage=true) { if(settings.inlinetex) multipage=true; if(!global) multipage=false; if(!pdflatex()) abort("inline pdf animations require -tex pdflatex or -tex xelatex"); if(settings.outformat != "") settings.outformat="pdf"; string filename=basename(); string pdfname=filename+".pdf"; if(global) export(filename,enclosure,multipage=multipage); shipped=false; if(!keep) { exitfcn currentexitfunction=atexit(); void exitfunction() { if(currentexitfunction != null) currentexitfunction(); if(multipage || !settings.inlinetex) this.purge(); if(multipage && !settings.inlinetex) delete(pdfname); } atexit(exitfunction); } if(!multipage) delete(pdfname); return load(index,delay,options,multipage); } int movie(enclosure enclosure=NoBox, int loops=0, real delay=animationdelay, string format=settings.outformat == "" ? "gif" : settings.outformat, string options="", bool keep=settings.keep) { if(global) { if(format == "pdf") { export(enclosure,multipage=true,view=true); return 0; } export(enclosure); } return merge(loops,delay,format,options,keep); } } animation operator init() { animation a=animation(); return a; } 


,

 plain.shipout(name,f,format="png",view=false); //generiruet!!!! 

- animation.asy, , : , . .gif , izgraphiki.asy, izgraphikigif.asy animation.asy —
 plain.shipout(name,f,format= format,view=false); 

, . . izgraphikigif.asy :

 //plain.shipout(name,f,format= format,view=false); 

, . , animation.asy
izgraphikigif.asy , . , izgraphikigif.asy .pdf , 2 . , , - if, , : , , Asymptote. , , , , , , – :

 cd /d %0\.. echo off set n=2 set name=kriv echo settings.twice=true; >%name%.asy echo settings.prc=false; >> %name%.asy echo // Uncomment the following 2 lines to support pdf animations: >>%name%.asy echo usepackage("animate"^); >>%name%.asy echo settings.tex="pdflatex"; >>%name%.asy echo import sinoid; >>%name%.asy echo animation a; >>%name%.asy echo int n=%n%; >>%name%.asy echo for(int i=0; i ^<= n; ++i^) { >>%name%.asy echo a.add(^); // Add currentpicture to animation. >>%name%.asy echo restore(^); >>%name%.asy echo } >>%name%.asy echo erase(^); >>%name%.asy echo label(a.pdf(BBox(0.25cm^),delay=250,"controls",multipage=false^)^); >>%name%.asy for /l %%k in (0,1,%n%) do ( echo import graph; > %name%+%%k.asy echo settings.twice=true; >> %name%+%%k.asy echo usepackage("animate"^); >> %name%+%%k.asy echo settings.tex="pdflatex"; >> %name%+%%k.asy echo import animation; >> %name%+%%k.asy echo limits((-6.3,-6.3^),(6.3,6.3^)^); >> %name%+%%k.asy echo size(0,100^); >> %name%+%%k.asy echo animation a=animation(global=false^);>>%name%+%%k.asy echo for(int i=0; i ^<= 0; ++i^) { >>%name%+%%k.asy echo real r=0.925; >> %name%+%%k.asy echo real R=3.61; >> %name%+%%k.asy echo real d=1.39; >> %name%+%%k.asy echo real x(real t^) {return (R+r^)*cos(t^)-d*cos((R+r^)*t/r^);} >> %name%+%%k.asy echo real y(real t^) {return (R+r^)*sin(t^)-d*sin((R+r^)*t/r^);} >> %name%+%%k.asy echo draw(graph(x,y,0,2*pi*%%k/%n%^),green^); >> %name%+%%k.asy echo axes("$x$","$y$",Arrow^); >> %name%+%%k.asy echo a.add(^); // Add currentpicture to animation. >>%name%+%%k.asy echo restore(^); >>%name%+%%k.asy echo } >>%name%+%%k.asy echo erase(^); >>%name%+%%k.asy echo // Merge the images into a pdf animation. >>%name%+%%k.asy echo label(a.pdf(^)^); >>%name%+%%k.asy ) rem for /f %%l in (0,1,%n%) do asy '%name%+%%l'.asy rem asy *.asy for /l %%l in (0,1,%n%) do ( asy %name%+%%l.asy taskkill /IM AcroRd32.exe ) for /l %%l in (0,1,%n%) do rename %name%+%%l.pdf _%name%+%%l.pdf asy %name%.asy 


。 , , : kriv.asy , 2d-.pdf , , , kriv.asy Asymptote , kriv.pdf , , , .pdf, .asy : , , . , : play , , , , ! – . , , , : kriv epicykloida. , Astroida. name krivaja, – kriv .pdf . , Asymptote: , , Astroida.asy, . .mpg (, ) , , , , - . , , , Asymptote : .asy, .pdf .asy, .gif, -, , .

.asy, .pdf, :

 label(a.pdf()); 

.asy, .gif, :

 a.movie(); 

.asy, .mpg, , .asy, .gif. .mpg .asy,

 settings.twice=true; 

, , .

Source: https://habr.com/ru/post/zh-CN468125/


All Articles