「asymptote」というベクタグラフィックス記述言語を試しに使ってみたので、まとめてみる。
ことの始まり
latex文書中に、球面や放物線などの数学的な図形を挿入するための図形描画ソフトで、以下のようなイメージにあうものを探していた。
- ベクター画像として描画。
- 手書きでない。
- 手軽に描画できる。
ネットで調べると、例えばTexWiki(の「関連ツールなど」のところ)に、かなり詳しい情報がまとめられていた。latex文書に挿入する画像は、「tgif」や「Inkscape」で作成することが多かったのだけど、手書きで描画したくなかったので却下した。また、「gnuplot」や「OpenGL」など他の選択肢もあったのだけど、今回はasymptoteが合ってそうなので、試しに使ってみた。
Asymptoteは、sourceforgeやgnuなどのサイトに詳しい説明が書いてある。
aptでインストール
ubuntu 9.04へのインストールは極めて簡単で、以下のようにコマンドラインからapt-getで入れるか、synapticを使ってインストールします。ちなみに、ポストスクリプトビューアの「gv」が入っていないならば、これもインストールしておきます(他のポストスクリプトビューアでも良いのかもしれないけれど、試していないので不明)。
# apt-get install asymptote
インストールして少し使ってみたら、3次元図形を描画するときにエラーが出てうまくいかないことが分かった(理由不明)。インストールされていたバージョンは1.43-1だったので、最新のに比べて古いようだ。よって、アンインストールして、最新のソースをダウンロードし、インストールすることにした。
# apt-get remove asymptote
ソースからインストール
公式サイトから最新のソースファイルをダウンロードする。私は、バージョン1.85のもの(asymptote-1.85.src.tgz)を入れた。Document->Installation->2.6 Compiling from UNIX sourceに書いてあるように、garbage collectorが必要なようです。# wget http://downloads.sourceforge.net/asymptote/asymptote-1.85.src.tgz # gunzip asymptote-1.85.src.tgz # tar -xf asymptote-1.85.src.tgz # cd asymptote-1.85 # wget http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-7.1.tar.gz # ./configure # make all # make install
最初にapt-getでインストールしたときに、実行ファイルasyが/usr/binにあったけど、ソースからインストールした方は/usr/local/binに配置される。これを通知するためにリハッシュしておく。
# hash -r
動作確認
詳しい使い方は、sourceforgeにある公式サイトにDocumentが置いてあります。また、wikiもあって、分かりやすく書かれています。まず、次のようにターミナルからasyで起動します。後は、描画コマンドを順次発行して、対話式に描画していきます。以下では、原点から(100,100)に向けて線を引くように命令しています。
$ asy Welcome to Asymptote version 1.43 (to view the manual, type help) > draw((0,0)--(100,100));
すると、gvが起動して、きちんと線が描かれていることが確認されました。
対話モードを終了するには、次のようにする。
> quit $
また、graph3を使って3次元図形を描画するコードを動かしてみました。このコードは、Documentに書いてあるものを使っています。エディタで、次のコードを書いてtest.asyで保存します。
import graph3; size(0,200); size3(200, IgnoreAspect); currentprojection=orthographic(4,6,3); real x(real t) {return cos(2pi*t);} real y(real t) {return sin(2pi*t);} real z(real t) {return t;} path3 p=graph(x,y,z,0,2.7,operator ..); draw(p,Arrow3); scale(true); xaxis3(XZ()*"$x$", Bounds, red, InTicks(Label, 2,2)); yaxis3(YZ()*"$x$", Bounds, red, InTicks(beginlabel=false, Label, 2,2)); zaxis3(XZ()*"$x$", Bounds, red, InTicks);
そして、実行して、epsファイルが生成されていることを確認します。
$ asy test.asy $ ls test.asy test.eps $ gv test.eps &
0 コメント:
コメントを投稿