矢量绘图软件初探

简介

前几天从图书馆借到了 David J. Griffiths Intoduction to Electrodynamics 4th Edition 的原版,极大地改善了我阅读这本书的条件(以前只有世界图书出版公司的模糊影印)。值得一提的是这本书上很多示意图的质量都非常的高,远超国内教材不说,就算是在国外近年的几本教材之中也可以算是非常精致。抱着倒腾的心态,笔者也饶有兴致地开始折腾起了计算机上的各类矢量绘图软件。由于精力有限,AI, CDR, Visio 这种巨大的软件并没有去碰。最后搞明白多少也不敢说,只是觉得有趣,放上来和大家分享下。

Omni Graffle

这个是文艺软件公司 The Omni Group 出品的效率软件之一,兼具 App Icon, House Design 这种精细设计的功能和 Flow Chart, Screen Navigation 这种效率和开发面向的功能。可以说是一种比较万能的选择。软件的用户界面非常的精致,很多自动绘图的功能也非常强大。不过要说绘制教材用的那种图,还是有诸多的不足:

METAPOST 是一个强大的矢量绘图语言。至于有多强大,请看 André Heck Learning METAPOST by Doing 中下面这几个示例:

beginfig(1);
    pickup pencircle xscaled 2bp yscaled 0.25bp
      rotated 60 withcolor red;
    for i=10 downto 1:
      draw 5(i,0)..5(0,i)..5(-i,0)
           ..5(0,-i+1)..5(i-1,0);
    endfor;
    endfig;
    end;
    

beginfig(1)
    u:=1cm; branchrotation := 60;
    offset := 180-branchrotation;
    thinning := 0.7;
    shortening := 0.8;
    def drawit(expr p, linethickness) =
      draw p withpen pencircle scaled linethickness;
    enddef;
    vardef tree(expr A,B,n,size) =
      save C,D,thickness; pair C,D;
      thickness := size;
      C := shortening[B, A rotatedaround(B,
          offset+uniformdeviate(branchrotation))];
      D := shortening[B, A rotatedaround(B,
          -offset-uniformdeviate(branchrotation))];
      if n>0:
        drawit(A--B, thickness);
        thickness := thinning*thickness;
        tree(B, C, n-1, thickness);
        tree(B, D, n-1, thickness);
      else:
        drawit(A--B,thickness);
      thickness := thinning*thickness;
      drawit(B--C, thickness);
      drawit(B--D, thickness);
      fi;
    enddef;
    tree((80,0), (80,u), 10, 2mm);
    endfig;
    end;
    

给出曲面的矢量绘图:(这个示例的代码比较长,就不放出了)

可以看到 METAPOST 不仅风格简洁,功能强大,还可以做到很多别的图形语言做不到的事情。
METAPOST 的核心工作流是:用户编写 METAPOST 文件,通过 mpost 编译后生成 EPS 插入文档或再用 epstopdf 转换生成 PDF 产品。 互联网上有很多 METAPOST 的教程,除此之外,再推荐一个 METAPOST Previewer 可以实现半 WYSIWYG 的编辑。

METAPOST 可以说是科技绘图——不管是示意图还是数学可视化——的不二之选了,但是为了绘制矢量图去学一门没啥别的用的语言——除非你比我还要 Geek 十倍——性价比不是很高。

Mathematica

Mathematica 的大名可谓是家喻户晓了吧,符号计算、函数式编程……好处不胜枚举。而且最重要的是,作为一个学理科的,Mathematica, MATLAB, Python 什么的里面你总得用一个吧……由于笔者对 MATLAB 了解不多,所以这里只讲 Mathematica 的绘图。

Mathematica 绘图的核心是 Plot, Plot3D, Graphics, Graphics3D 还有 Show。最后一个是用于把多个绘图结合的指令。请看下面的示例:

Graphics3D[GraphicsComplex[Table[{i, i, i}, {i, 1, 5}], {
       Sphere[4, 1.5],
       Text[Style[\[Integral]f[x] \[DifferentialD]x, 36, 
         FontFamily -> Times], 4],
       Point[Range[5]]
       }]]
    

Mathematica 的大多使用帮助都可以在自带的帮助文档里找到,这里不多赘述了。

Geogebra

Geogebra 是一个免费开源的绘图软件,它有点类似于一个万能的小工具,强大好用。新版本 Geogebra 最棒的一点是:它支持将绘制的图形导出成为 Tikz/PGF 或 PSTricks 格式,在 LaTeX 中即时编译(可惜的是它不支持 3D)。

Untitled