用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引擎

sfdp

sfdp引擎

sfdp引擎

circo引擎

circo引擎

circo引擎

参考资料

 



本文遵从CC版权协定,转载请以链接形式注明出处。
本文链接地址: https://www.annhe.net/article-3244.html

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

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

发表评论

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