用dot语言画围棋棋谱

突发奇想要用dot语言来画围棋棋谱。

代码实现

测试了一下,交叉点用 point,棋子用 circle并fillcolor,可以完成棋谱的绘制。然而一个个点的画当然不现实,首先想到的就是将sgf棋谱转换为dot语言。用shell脚本实现,首先设置所有的点为point,然后重定义有棋子的点为circle。

功能是实现了,然而速度非常慢。

棋子画好了,接下来是连线。连线比较固定,可以生成一次以后直接用。

这里涉及到数字和字母的对照,a2d是字母转数字,这个比较通用,然而在这里并没有什么卵用,用数字计算点的边比较方便,所以需要数字转字母。找不到现成的通用函数,只好自己写了个d2a函数,只能处理特定字母和数字。

接下来,sgf函数生成棋子,然后将draw函数生成的文本追加到dot源码中,最后的dot源码片段示例:

GraphViz各种引擎生成的棋谱

neato引擎,就这个最靠谱

neato生成的棋谱
neato生成的棋谱

dot

dot画棋谱
dot画棋谱

twopi,放射状

twopi画棋谱
twopi画棋谱

fdp,变形的棋盘

fdp画棋谱
fdp画棋谱

参考资料

One thought on “用dot语言画围棋棋谱

  1. Pingback: Discuz插件处理大型dot源码 | 知行近思

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注