前几天从图书馆借到了 David J. Griffiths Intoduction to Electrodynamics 4th Edition 的原版,极大地改善了我阅读这本书的条件(以前只有世界图书出版公司的模糊影印)。值得一提的是这本书上很多示意图的质量都非常的高,远超国内教材不说,就算是在国外近年的几本教材之中也可以算是非常精致。抱着倒腾的心态,笔者也饶有兴致地开始折腾起了计算机上的各类矢量绘图软件。由于精力有限,AI, CDR, Visio 这种巨大的软件并没有去碰。最后搞明白多少也不敢说,只是觉得有趣,放上来和大家分享下。
这个是文艺软件公司 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, 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 最棒的一点是:它支持将绘制的图形导出成为 Tikz/PGF 或 PSTricks 格式,在 LaTeX 中即时编译(可惜的是它不支持 3D)。