« 九段下 ぴえもん | メイン | なかなか暇にならず »
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をサイン・インしてくださってもいいです。