Uvod u Asymptote


Asymptote je vektorski grafički jezik koji omogućava matematičko definiranje objekata koji će se iscrtati na ekranu. Inspiriran je MetaPost-om, slabijim prethodnikom s manjim opsegom mogućnosti. Razvijen je kao standard za crtanje matematičkih objekata. Sintaksa Asymptote-a je vrlo slična C++ sintaksi. Kombatibilan je s Latexom što omogućava korištenje ovog jezika i u znanstvene svrhe. Također omogućava i generiranje 3D objekata prikladnih za PDF, zbog čega će ovo poglavlje biti posvećeno njemu.





Primjeri


Asymptote omogućava crtanje jednostavnih trodimenzionalnih oblika poput valjka, kocke, kugle i sl. Kod definiranja jednostavnih objekata potrebno je pozvati paket "solids", nakon čega se definira veličina objekta te njegove točke u XYZ ravnini. Slijedi primjer crtanja valjka.

import solids; size(0,150); currentlight=Viewport; revolution valjak=cylinder(O,1.2,1.6,Y+Z); draw(surface(valjak),red,render(merge=true)); draw(valjak,red);


Napomena: Spremiti PDF i otvoriti uz pomoć Adobe Readera (verzija 9+).







Također je moguće iscrtati i graf u 3D ravnini. Prije definiranja grafa moraju se pozvati paketi zaduženi za rad s 3D grafom. Zatim se definira projekcija, veličina površine te formula grafa. Na kraju se definirani objekti pozivaju opcijom Draw, što se vidi u primjeru koda.

import graph3; import grid3; import palette; currentprojection=orthographic(0.7,1.1,1); size(300,200,IgnoreAspect); defaultrender.merge=true; real formula(pair z) {return cos(2*pi*z.x)*sin(2*pi*z.y);} surface povrsina=surface(formula,(-1/2,-1/2),(1/2,1/2),40,Spline); draw(povrsina,mean(palette(povrsina.map(zpart),Rainbow())),black); grid3(XYZgrid);


Napomena: Spremiti PDF i otvoriti uz pomoć Adobe Readera (verzija 9+).







Također je moguće kreirati i složenije oblike poput lopte ili dinosaura.










Još jedna mogućnost Asymptote-a je i stvaranje animacija unutar PDF-a. Potrebno je pozvati paket "animate" te definirati postavke animacije.


import animate; import patterns; settings.tex="pdflatex"; animation animacija; add("brick",brick(black)); int brojac=15; for(int i=0; i < 2.5brojac; ++i) { picture slika; size(slika,75); path putanja=circle((0,sin(pi/brojac*i)),1); fill(slika,putanja,mediumred); fill(slika,putanja,pattern("brick")); animacija.add(slika); } label(animacija.pdf("controls",multipage=false));