2006年8月11日星期五

学用绘图工具MetaPost(一)

MetaPost是贝尔实验室的John Hobby基于Knuth的METAFONT设计的一种绘图语言。它适于绘制精确的数学图形,可以方便的生成EPS文件,供插入到LaTeX文档中。

Linux下可以用mpost命令处理编辑好的MetaPost文件,生成EPS文件。生成的EPS文件可以作为图片插入到LaTeX文件中,但是没办法直接用gv等PostScript浏览器直接观看,这里有关于这个问题的讨论和解决办法。另外,可以用mptopdf命令代替mpost,可以解决这个问题,而且可以直接生成PDF文件。

下面是MetaPost的简介。beginfig...endfig之间是绘图命令。实际使用中,好几个beginfig...endfig可以放在一个文件里,文件最后需要有一个end命令。
  1. 画直线和曲线
  2. MetaPost代码生成的图像
    beginfig(1);
    z0=(0,0);
    z1=(3cm,2cm);
    z2=(2cm,4.5cm);
    z3=(0.5cm,3.5cm);
    z4=(1.5cm,2.5cm);
    draw z0--z1--z2--z3--z4;
    endfig;
    fig1
    beginfig(2);
    u=1cm;
    z0=(0,0);
    z1=(3u,2u);
    z2=(2u,4.5u);
    z3=(0.5u,3.5u);
    z4=(1.5u,2.5u);
    draw z0..z1..z2..z3..z4;
    endfig;
    fig2
    beginfig(3);
    z0=(0,0);
    z1=(3cm,2cm);
    z2=(2cm,4.5cm);
    z3=(0.5cm,3.5cm);
    z4=(1.5cm,2.5cm);
    draw z0..z1..z2..z3--z4--cycle;
    endfig;
    fig3
  3. 表示方向的dir和用于循环的for
  4. dir a提供了与x轴夹角为a度的单位矢量。dir 0相当于rightdir 90相当于up,类似的方向矢量还有leftdown
    beginfig(4);
    draw (
        for i=0 upto 7:
          80dir (135i)--
        endfor
          cycle);
    endfig;
    fig4
    beginfig(5);
    for a=0 upto 7:
      draw (0,0){dir 45}..{dir 10a}(6cm,0);
        endfor
    endfig;
    fig5
  5. 改变画笔粗细
  6. beginfig(6);
    u=1cm;
    draw (-u,0)--(u,0);
    draw (0,-u)--(0,u);
    pickup pencircle scaled 3;
    draw (-u,u)--(u,u)--(u,-u)--(-u,-u)--cycle;
    endfig;
    fig6

没有评论: