« 九段下 ぴえもん | メイン | なかなか暇にならず »

2007年09月22日(土曜日)

メタポストでお絵かき [ MetaPost ]

もう20年ぐらい前にちょっとだけかじったことのあるMetaFontだが,その変種であるMetaPostの勉強を始めようかと思う。これはPostScriptの画像を作成するプログラムなのだが,イラストレータなどと違って,座標などを計算して表示するのが特徴。連立方程式を解くシステムが組み込まれているようで,関係式を列挙するだけで,点の座標を自動的に計算してくれる。これは便利だ。要するに「PostScriptお絵かき専用のプログラム言語」なのである。Donald KnuthがTeXで使うためのタイプフェース(活字)を作成するために作ったプログラムがMetaFontなのだが,弟子のJohn Hobbyが出力がPostScriptになるように修正を加えたお絵かきソフトがMetaPostというわけだった。

まだまだマクロとか使いこなせていないが,繰り返し処理ぐらいはできるようになった。メモとして日記に記録しておこう。TeXと違って,日本語の情報ならびに入門書の類が少ないのがつらいところ。

テオドロスと無理数

三辺が1, 1, ルート2の直角三角形から始めて,高さが1の直角三角形を次々に作っていったものが,この図。斜辺の長さは順にルート2,ルート3,等となる。ルート17まで描いてあるが,もう一つ三角形を描くと最初の三角形と重なってしまう。テオドロスはそれでルート17で止めたということだった。不思議なのは,これがルートnが無理数であることと関係ありそうななさそうな話なのである。テオドロスはルートnが無理数であることを順に証明して行って,ルート17で止めたという話なのである。何故にルート17で止めたのか,それがこの図と関係あるとかないとか。うーん,良く分からないなあ。

いずれにしても,由緒ある(?)図なのである。プログラムは以下の通り。工夫のかけらもないコードでちょっと恥ずかしいが。

u:=2cm; uu:=3mm;
pair za[],zb[],zc[];
z0=(0,0); z1=(u,0);
for i=1 step 1 until 16:
 z[i+1]-z[i] = u*(unitvector z[i] rotated 90);
 za[i]-z[i] = -uu*(unitvector z[i]);
 zb[i]-z[i] = uu*(unitvector z[i] rotated 90);
 zc[i]-za[i]=zb[i]-z[i];
 draw z[0]--z[i]--z[i+1] withpen pencircle scaled 1bp;
 draw za[i]--zc[i]--zb[i];
endfor
draw z0--z17 withpen pencircle scaled 1bp;

投稿者 sukarabe : 2007年09月22日 06:58

トラックバック

このエントリーのトラックバックURL:
http://njet.oops.jp/cgi/mt/mt-tb-alt.cgi/1630

コメント

コメントしてください

comment spam対策のため,名前とメールの入力が必須になっていますが,メールアドレスは公開されません。Web SiteのURLは任意です。Type Key IDをお持ちの方はType Keyをサイン・インしてくださってもいいです。





次回の入力を省くために、名前・URLなどを保存しますか?