昨天晚上想要画一个光线传播示意图。第一反应是用Metapost语言来做。可自己上一次使用该语言编程还要追溯到研究生初期。到现在十几年过去了,已经彻底忘完。同时,Metapost对于三维绘图的支持也没有,需要通过自行计算,将三维图形投影到用于绘图的二维平面上,从而根本不可能在较短的时间有什么结果。之后,试用功能更为强大的Asymptote,发现它的三维绘图工具包three.asy存在bug,编译的时候总是报division by 0的错误。上网查了一下,网友说是glut库的问题而不是Asymptote自身的问题,但是也没有给出什么有效的解决方案。此外,还试了使用Python的Matplotlib包以及Geogebra几何画板作图。可能一则是受软件自身功能的限制,二是自己对这些工具和编程语言还都十分不熟悉,所以最终都没有得到满意的样式。

看来,“书到用时方恨少”,平时缺乏持续与专注的学习、定期的复习、反复的训练,以及广泛的涉猎,等到了关键的时候才暴露出自身基础的不牢固与能力的缺乏。

《论语·为政篇第二 2.11》 子曰:「温故而知新,可以为师矣。」

《庄子·达生》:“用志不分,乃凝于神。其佝偻丈人之谓乎!”

如此导致废时误事,想要助人也是心有余而力不足,徒生遗憾与无奈。

《论语·宪问篇第十四 14.30》 子曰:「不患人之不己知,患其不能也。」

吸取了这样的教训后,第二天花时间学习了TikZ语言的基础部分和3dplot功能包,编码调试后基本上得到了如下图所示的期望的结果。

使用TikZ绘制三维图